Что нового

[Ошибки] Не могу найти ошибку

Статус
Закрыто для дальнейших ответов.

lcd1232

Новичок
Сообщения
13
Репутация
0
Код:
While 1
	$nMsg = GUIGetMsg()
	If $Window <>0 Then
			SEARCHHWND($NPID)
			Sleep(1000)
			EndIf
Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
	WEnd
При попытке запуска выдает ошибку
: ==> "Wend" statement with no matching "While" statement.:
строка последняя
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
lcd1232,
1. Switch...Case...EndSwitch.
EndSwitch у Вас отсутствует.
2. Нельзя использовать паузу (У Вас Sleep(1000)) при использовании $nMsg = GUIGetMsg().

PS
Вы бы написали то, что хотите сделать и выложили скрипт, а то выкладываете непонятные и нерабочие куски кода.
 

MockeR

Знающий
Сообщения
101
Репутация
14
Код:
While 1
    $nMsg = GUIGetMsg()
    If $Window <>0 Then
		SEARCHHWND($NPID)
		Sleep(1000)
	EndIf
	Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
	EndSwitch
WEnd
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
MockeR,
Ваш код работать не будет (см. п.2. в моем предыдущем посте).
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Код:
While 1
    ;=====================
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
    ;=====================
    If $Window <>0 Then
        SEARCHHWND($NPID)
    EndIf
WEnd


Может быть так? :smile:
И еще, почитайка русскую справку!
 
Автор
L

lcd1232

Новичок
Сообщения
13
Репутация
0
madmasles
Хорошо. Я хочу написать ренеймер для игры Perfect World. Чтобы при нажатии на список($Window) показывала все окна виндовс(те что в диспетчере задач=>приложения), при нажатии на $input убирался текст, который я набрал. Чтобы при выделении галочки($CheckBox) показывала приложения имеющий класс пв(1 чел дал функцию), ну а при нажатии кнопки переименовать название выбранного окна становилось в название написаного
[box title=Код]
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Func SEARCHHWND($INPID)
 Local $I, $HWIN, $LISTWIN = WinList()
 $I = 0
 Do
  $I = $I + 1
  $HWIN = WinGetProcess($LISTWIN[$I][0])
 Until $HWIN = $INPID Or $I >= $LISTWIN[0][0]
 If $HWIN = $INPID Then
  Return $LISTWIN[$I][1]
 Else
  Return -1
 EndIf
 EndFunc
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Renamer by lcd1232", 252, 127, 366, 187)
$Checkbox = GUICtrlCreateCheckbox("Окна класса PW", 17, 80, 111, 41)
$Button = GUICtrlCreateButton("Переименовать", 136, 80, 97, 41, $WS_GROUP)
$Input = GUICtrlCreateInput("Новое название", 16, 48, 217, 21)
GUICtrlSetCursor (-1, 5)
$Window = GUICtrlCreateCombo("Window", 16, 8, 217, 25)
GUISetState(@SW_SHOW)
Dim $Form1_AccelTable[1][2] = [["{ENTER}", $Button]]
GUISetAccelerators($Form1_AccelTable)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    If $Window <>0 Then
        SEARCHHWND($NPID)
    EndIf
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd
[/box]
Код:
Func SEARCHPID()
 Local $LISTPROCEL = ProcessList("elementclient.exe")
 Local $I, $MEMLIST, $NAME, $K = 0, $LISTNAME = "", $ADDMEM
 If $LISTPROCEL[0][0] <> 0 Then
   $NUMELEMENT = $LISTPROCEL
   $LISTTITLE[0][0] = $LISTPROCEL[0][0]
   For $I = 1 To $LISTPROCEL[0][0]
    $MEMLIST = _MEMORYOPEN($LISTPROCEL[$I][1])
    $NAME = READNAMECHAR(_MEMORYREAD(_MEMORYREAD($BASEADD1C, $MEMLIST) + $BaseStruct, $MEMLIST) + $NameOFF, $MEMLIST)
    _MEMORYCLOSE($MEMLIST)
    WinSetTitle(($LISTPROCEL[$I][1]), "", $NAME)
    If $NAME = "" Then $NAME = "Ошибка"
    $LISTTITLE[$I][0] = $LISTPROCEL[$I][1]
    $LISTTITLE[$I][1] = SEARCHHWND($LISTPROCEL[$I][1])
    WinSetTitle($LISTTITLE[$I][1], "", $NAME)
    $LISTTITLE[$I][2] = $NAME
    $LISTTITLE[$I][3] = $LISTPROCEL[$I][0]
    If $I < $LISTPROCEL[0][0] Then
     $LISTNAME = $LISTNAME & $NAME & "|"
    Else
     $LISTNAME = $LISTNAME & $NAME
    EndIf
    If $NAME = $NAMECHAR And $NAMECHAR <> "Ошибка" Then $K = $I
   Next
   $LISTELEMENT = $LISTNAME
   GUICtrlSetData($Window, "")
   GUICtrlSetData($Window, $LISTELEMENT)
   If $K <> 0 Then
    GUICtrlSetData($Window, $NAMECHAR)
   EndIf
 EndIf
EndFunc
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
madmasles [?]
2. Нельзя использовать паузу (У Вас Sleep(1000)) при использовании $nMsg = GUIGetMsg().
Я много раз использовал паузу, нечего плохо не случалось...

lcd1232
У тя скрипт кривой...
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Если для Вас принципиальна задержка после использования функции "SEARCHHWND",
тогда может попробывать решить проблему через AdlibRegister().
Примерно так :

Код:
AdlibRegister("_Search",1000)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func _Search ()
  If $Window <>0 Then
        SEARCHHWND($NPID)
    EndIf  
EndFunc
 
Автор
L

lcd1232

Новичок
Сообщения
13
Репутация
0
Ganibal95
Я это понял, но где? Понять не могу...
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
lcd1232 [?]
Я хочу написать ренеймер для игры Perfect World.
Вот вам готовое решение (откапал в своих архивах). Делал год назад для своих домочадцев, когда они играли в PW.
До этого они пользовались каким-то готовым решением, которое нашли в Интернете, но та утилита всё время выдавала ошибку после обновления клиента игры, вот они меня и озадачили.

Мультиклиент pwmulticlient.exe в архиве, без автоматизации account`ов. Есть исходный код pwmulticlient.au3, в котором писал дополнение к первой версии для автоматизации входа сразу под несколькими account`ами, который так и остался на стадии разработки, в силу того, что домочадцы забросили игру через пол года. :smile:

Архив содержит: pwmulticlient.exe, pwmulticlient.au3 и ...\ico\PW.ico.

Использование:
pwmulticlient.exe нужно положить в папку …\ Perfect World\element\, создать для него ярлык на рабочем столе, и для запуска очередного окна пользоваться им. При первом запуске скрипт "попросит" указать, где находится клиент, и сохранит путь в option.ini

Пользуйтесь на здоровье.

P.S. По поводу использования.
Желающие совершенствовать скрипт, могут без каких либо ограничений использовать pwmulticlient.au3, но, всю ответственность за нанесение вреда пользователю вашими модификациями будете нести только вы!
 
Статус
Закрыто для дальнейших ответов.
Верх