diff --git a/src/evalwindow.c b/src/evalwindow.c
index d47680c..737ca7d 100644
--- a/src/evalwindow.c
+++ b/src/evalwindow.c
@@ -468,6 +468,9 @@
     if (rettv_list_alloc(rettv) != OK)
 	return;
 
+    if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL)
+	return;
+
     if (argvars[0].v_type != VAR_UNKNOWN)
     {
 	// Information about one tab page
@@ -504,6 +507,9 @@
     if (rettv_list_alloc(rettv) != OK)
 	return;
 
+    if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL)
+	return;
+
     if (argvars[0].v_type != VAR_UNKNOWN)
     {
 	wparg = win_id2wp(tv_get_number(&argvars[0]));
@@ -559,6 +565,10 @@
 
     if (rettv_list_alloc(rettv) == FAIL)
 	return;
+
+    if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL)
+	return;
+
 #if defined(FEAT_GUI) \
 	|| (defined(HAVE_TGETENT) && defined(FEAT_TERMRESPONSE)) \
 	|| defined(MSWIN)
@@ -624,6 +634,9 @@
     int		nr = 1;
     char_u	*arg;
 
+    if (in_vim9script() && check_for_opt_string_arg(argvars, 0) == FAIL)
+	return;
+
     if (argvars[0].v_type != VAR_UNKNOWN)
     {
 	arg = tv_get_string_chk(&argvars[0]);
@@ -672,9 +685,9 @@
     void
 f_win_execute(typval_T *argvars, typval_T *rettv)
 {
-    int		id = (int)tv_get_number(argvars);
+    int		id;
     tabpage_T	*tp;
-    win_T	*wp = win_id2wp_tp(id, &tp);
+    win_T	*wp;
     win_T	*save_curwin;
     tabpage_T	*save_curtab;
 
@@ -682,6 +695,14 @@
     rettv->v_type = VAR_STRING;
     rettv->vval.v_string = NULL;
 
+    if (in_vim9script()
+	    && (check_for_number_arg(argvars, 0) == FAIL
+		|| check_for_string_or_list_arg(argvars, 1) == FAIL
+		|| check_for_opt_string_arg(argvars, 2) == FAIL))
+	return;
+
+    id = (int)tv_get_number(argvars);
+    wp = win_id2wp_tp(id, &tp);
     if (wp != NULL && tp != NULL)
     {
 	pos_T	curpos = wp->w_cursor;
@@ -705,6 +726,9 @@
     void
 f_win_findbuf(typval_T *argvars, typval_T *rettv)
 {
+    if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL)
+	return;
+
     if (rettv_list_alloc(rettv) != FAIL)
 	win_findbuf(argvars, rettv->vval.v_list);
 }
@@ -715,6 +739,12 @@
     void
 f_win_getid(typval_T *argvars, typval_T *rettv)
 {
+    if (in_vim9script()
+	    && (check_for_opt_number_arg(argvars, 0) == FAIL
+		|| (argvars[0].v_type != VAR_UNKNOWN
+		    && check_for_opt_number_arg(argvars, 1) == FAIL)))
+	return;
+
     rettv->vval.v_number = win_getid(argvars);
 }
 
@@ -726,8 +756,12 @@
 {
     win_T	*wp;
     tabpage_T   *tp;
-    int		id = tv_get_number(&argvars[0]);
+    int		id;
 
+    if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL)
+	return;
+
+    id = tv_get_number(&argvars[0]);
 #ifdef FEAT_CMDWIN
     if (cmdwin_type != 0)
     {
@@ -750,6 +784,9 @@
     void
 f_win_id2tabwin(typval_T *argvars, typval_T *rettv)
 {
+    if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL)
+	return;
+
     if (rettv_list_alloc(rettv) != FAIL)
 	win_id2tabwin(argvars, rettv->vval.v_list);
 }
@@ -760,6 +797,9 @@
     void
 f_win_id2win(typval_T *argvars, typval_T *rettv)
 {
+    if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL)
+	return;
+
     rettv->vval.v_number = win_id2win(argvars);
 }
 
@@ -774,6 +814,9 @@
     if (rettv_list_alloc(rettv) == FAIL)
 	return;
 
+    if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL)
+	return;
+
     wp = find_win_by_nr_or_id(&argvars[0]);
     list_append_number(rettv->vval.v_list, wp == NULL ? 0 : wp->w_winrow + 1);
     list_append_number(rettv->vval.v_list, wp == NULL ? 0 : wp->w_wincol + 1);
@@ -883,6 +926,10 @@
 
     rettv->v_type = VAR_STRING;
     rettv->vval.v_string = NULL;
+
+    if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL)
+	return;
+
     if (argvars[0].v_type != VAR_UNKNOWN)
     {
 	wp = find_win_by_nr_or_id(&argvars[0]);
@@ -934,6 +981,9 @@
 {
     win_T	*wp;
 
+    if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL)
+	return;
+
     wp = find_win_by_nr_or_id(&argvars[0]);
     if (wp == NULL)
 	rettv->vval.v_number = -1;
@@ -959,6 +1009,9 @@
 {
     win_T	*wp;
 
+    if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL)
+	return;
+
     wp = find_win_by_nr_or_id(&argvars[0]);
     if (wp == NULL)
 	rettv->vval.v_number = -1;
@@ -977,6 +1030,9 @@
     if (rettv_list_alloc(rettv) != OK)
 	return;
 
+    if (in_vim9script() && check_for_opt_number_arg(argvars, 0) == FAIL)
+	return;
+
     if (argvars[0].v_type == VAR_UNKNOWN)
 	tp = curtab;
     else
@@ -1007,6 +1063,9 @@
 {
     int		nr = 1;
 
+    if (in_vim9script() && check_for_opt_string_arg(argvars, 0) == FAIL)
+	return;
+
     nr = get_winnr(curtab, &argvars[0]);
     rettv->vval.v_number = nr;
 }
@@ -1052,6 +1111,9 @@
 {
     dict_T	*dict;
 
+    if (in_vim9script() && check_for_dict_arg(argvars, 0) == FAIL)
+	return;
+
     if (argvars[0].v_type != VAR_DICT
 	    || (dict = argvars[0].vval.v_dict) == NULL)
 	emsg(_(e_invarg));
@@ -1129,6 +1191,9 @@
 {
     win_T	*wp;
 
+    if (in_vim9script() && check_for_number_arg(argvars, 0) == FAIL)
+	return;
+
     wp = find_win_by_nr_or_id(&argvars[0]);
     if (wp == NULL)
 	rettv->vval.v_number = -1;
