1 (изменено: JackieCh, 2016-08-15 18:25:08)

Тема: проблема со Screenheight

Добрый день. Не могу разобраться с разрешением экрана в скрипте, чтобы макрос работал в игре. В скрипте стоит

y:= A_ScreenHeight - 150 	    ;получение У-координаты кнопки рынка "ОК" для текущего разреш.экрана.

то есть работает на разрешении в игре 1680х1050. На остальных разрешениях не пашет. Играю сам на 1152х864, соответственно не могу указать правильное разрешение в скрипте. Не подскажете что нужно изменить чтобы работал макрос на разр. 1152х864?

2

Re: проблема со Screenheight

Очевидно, нужно вычитать не 150, а другое число, своё для каждого разрешения. А на сколько пикселей у вас эта кнопка выше нижнего края экрана, это вам на месте виднее.

3

Re: проблема со Screenheight

А как это проверить?

4

Re: проблема со Screenheight

JackieCh, оформите код, как положено.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: проблема со Screenheight

SetDefaultMouseSpeed, 0    ;Скорость мышки теперь зависит от возможностей ПК.
			;Объявление переменных
	
			
eat:= 0 	;Еда
iron:= 1 	;Железо
wood:= 2 	;Дерево
coal:= 3 	;Уголь
stone:= 4	;Камень
gold:= 5	;Золото

			;Начало Обмена



		;Продажа:			0x008FC014 	- 	Патч 1.35а		/		0x008FBE34 - Классика.	/	0x008ff780	-	Помор
		;Покупка:			0x008FC018 	- 	Патч 1.35а		/		0x008FBE38 - Классика.	/	0x008ff784	-	Помор	
		;Кол-во продажи:	0x008FC010 	- 	Патч 1.35а		/		0x008FBE30 - Классика.	/	0x008ff788	-	Помор


sell:= 0x008FBE34
buy:= 0x008FBE38 
q:= 0x008FBE30


y:= A_ScreenHeight - 150 	    ;получение У-координаты кнопки рынка "ОК" для текущего разреш.экрана.


obm(Address, Data)				 ;объявление функции записи в память казаков
{                    ;ниже приведено тело функции

ProcessName = dmcr.exe          ; Имя процесса.
;Address = 0x008FC010          ; Адрес, Кол-ва продаж. 0x008FC010 - Патч1.35а,0x008FBE30 - Классика.
;Data = 3000               ; Записываемое значение
Size = 4               ; Размер переменной в байтах
VarSetCapacity(Buf, Size, 0)     ; Буфер, для записываемых данных.

NumPut(Data, Buf, 0, "UInt")     ; Данные - в буфер.

PROCESS_VM_WRITE = 0x20          ; Права на процесс.
PROCESS_VM_OPERATION = 0x8
Process, Exist, %ProcessName%     ; Поиск процесса.
PID := ErrorLevel          ; Идентификатор процесса будет в ErrorLevel.

hProcess := DllCall("OpenProcess", "UInt", PROCESS_VM_WRITE | PROCESS_VM_OPERATION
                                 , "Int",  False
                                 , "UInt", PID)
Ret := DllCall("WriteProcessMemory", "UInt", hProcess
                                   , "UInt", Address
                                   , "UInt", &Buf
                                   , "UInt", Size
                                   , "UInt", 0)

DllCall("CloseHandle", "UInt", hProcess) ; Освобождение хэндла процесса.
}



f1::
obm(sell, gold)
obm(buy, coal)
obm(q, 10000)
MouseClick, left, 325, %y%, 5     ;нажать кнопку рынка  5 раз
obm(sell, coal)
obm(buy, gold)
obm(q, 800000)
MouseClick, left, 325, %y%

obm(sell, gold)
obm(buy, iron)
obm(q, 10000)
MouseClick, left, 325, %y%, 5 
obm(sell, iron)
obm(buy, gold)
obm(q, 800000)
MouseClick, left, 325, %y%

obm(sell, wood)
obm(buy, stone)
obm(q, 10000)
MouseClick, left, 325, %y%, 5
obm(sell, stone)
obm(buy, wood)
obm(q, 400000)
MouseClick, left, 325, %y%
SetNumber(6)
RETURN ;Конец Обмена 

f2::
obm(sell, gold)
obm(buy, iron)
obm(q, 10000)
MouseClick, left, 325, %y%, 5 
obm(sell, iron)
obm(buy, gold)
obm(q, 850000)
MouseClick, left, 325, %y%

obm(sell, gold)
obm(buy, coal)
obm(q, 10000)
MouseClick, left, 325, %y%, 5     ;нажать кнопку рынка  5 раз
obm(sell, coal)
obm(buy, gold)
obm(q, 880000)
MouseClick, left, 325, %y%

obm(sell, wood)
obm(buy, stone)
obm(q, 10000)
MouseClick, left, 325, %y%, 5
obm(sell, stone)
obm(buy, wood)
obm(q, 400000)
MouseClick, left, 325, %y%

obm(sell, wood)
obm(buy, food)
obm(q, 10000)
MouseClick, left, 325, %y%, 5
obm(sell, food)
obm(buy, wood)
obm(q, 600000)
MouseClick, left, 325, %y%

obm(sell, gold)
obm(buy, wood)
obm(q, 10000)
MouseClick, left, 325, %y%, 5     ;нажать кнопку рынка  5 раз
obm(sell, wood)
obm(buy, gold)
obm(q, 600000)
MouseClick, left, 325, %y%
SetNumber(6)
RETURN ;Конец Обмена 


f4::
obm(sell, gold)
obm(buy, iron)
obm(q, 10000)
MouseClick, left, 325, %y%, 5 
obm(sell, iron)
obm(buy, gold)
obm(q, 850000)
MouseClick, left, 325, %y%

obm(sell, gold)
obm(buy, coal)
obm(q, 10000)
MouseClick, left, 325, %y%, 5     ;нажать кнопку рынка  5 раз
obm(sell, coal)
obm(buy, gold)
obm(q, 880000)
MouseClick, left, 325, %y%

obm(sell, wood)
obm(buy, stone)
obm(q, 10000)
MouseClick, left, 325, %y%, 5
obm(sell, stone)
obm(buy, wood)
obm(q, 325000)
MouseClick, left, 325, %y%

obm(sell, wood)
obm(buy, food)
obm(q, 10000)
MouseClick, left, 325, %y%, 5
obm(sell, food)
obm(buy, wood)
obm(q, 600000)
MouseClick, left, 325, %y%

obm(sell, gold)
obm(buy, wood)
obm(q, 10000)
MouseClick, left, 325, %y%, 5     ;нажать кнопку рынка  5 раз
obm(sell, wood)
obm(buy, gold)
obm(q, 600000)
MouseClick, left, 325, %y%
SetNumber(6)
RETURN ;Конец Обмена 




HOME::
Send, {DEL}
RETURN

f9::
Send, {SHIFTDOWN}
MouseClick, left, 375, %y%, 60
Send, {SHIFTUP}
RETURN 

f10::
Send, {SHIFTDOWN}
MouseClick, left, 375, %y%, 180
Send, {SHIFTUP}
RETURN 

^z::
Send, {CTRLDOWN}pз{CTRLUP}
RETURN 

SetNumber(n)               ;присвоение зданию цифры "n"
{
Send, {Control down}        
SetKeyDelay, 10, 10,
Send, %n%
Send, {Control up}
}

6

Re: проблема со Screenheight

Да нет, я имел в виду в первом посте, ну ладно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: проблема со Screenheight

JackieCh пишет:

А как это проверить?

Линейкой померить можно, потом пересчитать в пиксели.

8

Re: проблема со Screenheight

Я пользуюсь таким скриптом:

; Should work with all current AHK versions/builds
#NoEnv
SetBatchLines, -1 ; For speed in general
SetWinDelay, -1   ; For speed of WinMove
BW := 1           ; Border width (and height) in pixels
BC := "Red"       ; Border color
; ______________________________________________________________________________________________________________________
FirstCall := True
CoordMode, Mouse, Screen
Gui, -Caption +ToolWindow +LastFound +AlwaysOnTop
Gui, Color, %BC%
Return
; ______________________________________________________________________________________________________________________
~Esc::
ExitApp
; ______________________________________________________________________________________________________________________
+LButton::
    MouseGetPos, OriginX, OriginY
    SetTimer, DrawRectangle, 10
Return
; ______________________________________________________________________________________________________________________
+LButton Up::
   SetTimer, DrawRectangle, Off
   FirstCall := True
   Gui, Cancel
   ToolTip
   ; MsgBox, 0, Coordinates, X = %X1%  -  Y = %Y1%  -  W = %W1%  -  H = %H1%
Return
; ______________________________________________________________________________________________________________________
DrawRectangle:
   MouseGetPos, X2, Y2
   ; Has the mouse moved?
   If (XO = X2) And (YO = Y2)
      Return
   Gui, +LastFound
   XO := X2, YO := Y2
   ; Allow dragging to the left of the click point.
   If (X2 < OriginX)
      X1 := X2, X2 := OriginX
   Else
      X1 := OriginX
   ; Allow dragging above the click point.
   If (Y2 < OriginY)
      Y1 := Y2, Y2 := OriginY
   Else
      Y1 := OriginY
   ; Draw the rectangle
   W1 := X2 - X1, H1 := Y2 - Y1
   W2 := W1 - BW, H2 := H1 - BW
   WinSet, Region, 0-0 %W1%-0 %W1%-%H1% 0-%H1% 0-0  %BW%-%BW% %W2%-%BW% %W2%-%H2% %BW%-%H2% %BW%-%BW%
   If (FirstCall) {
      Gui, Show, NA x%X1% y%Y1% w%W1% h%H1%
      FirstCall := False
   }
   WinMove, , , X1, Y1, W1, H1
    ToolTip, Width: %W1%`nHeight: %H1%
Return

9

Re: проблема со Screenheight

YMP пишет:
JackieCh пишет:

А как это проверить?

Линейкой померить можно, потом пересчитать в пиксели.

21 дюйм экран монитора. Разр. экрана 1980х1080(рекомендуемая) стоит. А как в пиксели пересчитать? Вы меня уж извините, за столь ламерские вопросы

10

Re: проблема со Screenheight

Malcev пишет:

Я пользуюсь таким скриптом:

; Should work with all current AHK versions/builds
#NoEnv
SetBatchLines, -1 ; For speed in general
SetWinDelay, -1   ; For speed of WinMove
BW := 1           ; Border width (and height) in pixels
BC := "Red"       ; Border color
; ______________________________________________________________________________________________________________________
FirstCall := True
CoordMode, Mouse, Screen
Gui, -Caption +ToolWindow +LastFound +AlwaysOnTop
Gui, Color, %BC%
Return
; ______________________________________________________________________________________________________________________
~Esc::
ExitApp
; ______________________________________________________________________________________________________________________
+LButton::
    MouseGetPos, OriginX, OriginY
    SetTimer, DrawRectangle, 10
Return
; ______________________________________________________________________________________________________________________
+LButton Up::
   SetTimer, DrawRectangle, Off
   FirstCall := True
   Gui, Cancel
   ToolTip
   ; MsgBox, 0, Coordinates, X = %X1%  -  Y = %Y1%  -  W = %W1%  -  H = %H1%
Return
; ______________________________________________________________________________________________________________________
DrawRectangle:
   MouseGetPos, X2, Y2
   ; Has the mouse moved?
   If (XO = X2) And (YO = Y2)
      Return
   Gui, +LastFound
   XO := X2, YO := Y2
   ; Allow dragging to the left of the click point.
   If (X2 < OriginX)
      X1 := X2, X2 := OriginX
   Else
      X1 := OriginX
   ; Allow dragging above the click point.
   If (Y2 < OriginY)
      Y1 := Y2, Y2 := OriginY
   Else
      Y1 := OriginY
   ; Draw the rectangle
   W1 := X2 - X1, H1 := Y2 - Y1
   W2 := W1 - BW, H2 := H1 - BW
   WinSet, Region, 0-0 %W1%-0 %W1%-%H1% 0-%H1% 0-0  %BW%-%BW% %W2%-%BW% %W2%-%H2% %BW%-%H2% %BW%-%BW%
   If (FirstCall) {
      Gui, Show, NA x%X1% y%Y1% w%W1% h%H1%
      FirstCall := False
   }
   WinMove, , , X1, Y1, W1, H1
    ToolTip, Width: %W1%`nHeight: %H1%
Return

а этот скрипт для чего предназначен?

11

Re: проблема со Screenheight

Для того, чтобы не мерять линейкой.

12

Re: проблема со Screenheight

JackieCh пишет:

21 дюйм экран монитора. Разр. экрана 1980х1080(рекомендуемая) стоит. А как в пиксели пересчитать? Вы меня уж извините, за столь ламерские вопросы

Мерите весь экран по вертикали, потом расстояние сверху до кнопки. Пример чисто условный: весь экран по вертикали 50 см, расстояние до кнопки 40 см. Значит, 40 / 50 * 1080 = игрек-координата кнопки в пикселях.

13

Re: проблема со Screenheight

Разобрался в общем, нужно было вбить цифру 345 вместо 150, теперь работает макрос. Спасибо вам за отзывчивость.