craiganderson Posted June 14, 2014 Share Posted June 14, 2014 hello im working on a module and need to do the following: if game belongs to this list: game a, game b, game c then load the following way if game belongs to this list: game d, game e, game f then load the following way if game belongs to this list: game g, game h, game i then load the following way probably real easy for the experts on here point me in right direction? thanks craig Link to comment Share on other sites More sharing options...
craiganderson Posted June 14, 2014 Author Share Posted June 14, 2014 something like this? if (romName = "addemup_interact" or romName = "knockdown_interact" or romName = "backgammon_interact" or romName = "addition_hector1" or romName = "asteroides_hector1" or romName = attro_logic_interact" or romName = "base_spatiale_hector1") { ControlClick, Button5, DCHector settings Sleep, 1000 ControlClick, Button31, DCHector settings IfWinExist, DCHector Setting modification ahk_class #32770 { WinActivate ; Automatically uses the window found above. ControlSend, Button1, {Enter}, DCHector Setting modification ahk_class #32770 } WinWait(" DCHector - Micronique Hector emulatorahk_class Hector") WinWaitActive(" DCHector - Micronique Hector emulatorahk_class Hector") WinActivate, DCHector - Micronique Hector emulatorahk_class Hector Sleep,1000 WinMenuSelectItem, ahk_class Hector, , File, Load Tape Sleep,3000 Loop { ControlGetText, edit1Text, Edit1, Open ahk_class #32770 If ( edit1Text = romPath . "\" . romName . romExtension ) Break Sleep, 200 ControlSetText, Edit1, %romPath%\%romName%%romExtension%, Open ahk_class #32770 } Sleep, 3000 ControlSend, Button1, {Enter}, ahk_class #32770 Sleep, 5500 SetKeyDelay, 50 Send {l down} Sleep,1000 Send {l up} } Link to comment Share on other sites More sharing options...
bleasby Posted June 15, 2014 Share Posted June 15, 2014 I would do the following way. 1) Load a ini setting parameter to define the execution mode: settingsFile := modulePath . "\" . moduleName . ".ini" executionMode := IniReadCheck(settingsFile, "Settings|" . dbName, "Execution_Mode","Mode1",,1) 2) use the executionMode variable to define the execution: if (executionMode="Mode2") { ;Do whatever you want for games listed on mode2 } else if (executionMode="Mode3") { ;Do whatever you want for games listed on mode3 } else { ;Do whatever you want for games listed on mode1 } 3) Them I would simply fill the settings.ini file with the games that do not use the default Mode1 execution (I would make sure that the Mode 1 is the more common one to save some of the ini editing required). Any games not listed on the ini file would make use of the mode1 execution. settings.ini file [Game1Name] Execution_Mode=Mode2 [Game2Name] Execution_Mode=Mode2 [Game3Name] Execution_Mode=Mode3 Link to comment Share on other sites More sharing options...
craiganderson Posted June 16, 2014 Author Share Posted June 16, 2014 thank you i actually worked on it before i had a chanced to see your post thank you for your post so what i ended up doing is making 4 different sections of the module 1 for each type of rom/system each rom/game only works well being run under one specific system the emulator emulates 4 systems it doesnt really accept any command line stuff so its all sends and clicks etc BUT what i could have done because the rom names actually include the system that runs them ie combat_hector combat_interact combat_HR+ combat_HRX as made up examples maybe i should have said if romName includes hector...load this way if romName includes interact...load this way if romName includes HR+ ...load this way if romName includes HRX ... load this way How would I do that in autohotkey? Specifically, the "if romName includes the term "interact"" portion of the idea? thanks craiganderson see below for what i have done so far and because autohotkey ControlClick has known issues of being unreliable i played with the setkeydelay and used little loops to click things a few times to make sure clicks accepted and on my system it is working 100% perfectly!!! ive tested it about a million times now thanks yMEmu = DCHector MEmuV = v0.1 MURL = http://dchector.free.fr/index.html#top MAuthor = craiganderson MVersion =1.1 MCRC = iCRC = MID = MSystem = "Hector HRX" ;---------------------------------------------------------------------------- ; Notes: ; This module uses a BlockInput command which on my computer requires hyperspin and xpadder to be run as administrator. ; If Emulator Language is French and you would like English: Go to Options>Paramatres and Click "Anglais". ; In Emulator, go to Options>Settings: Click "Fast input" under Tape. Seems like a good idea to me. Has not caused a problem on my system yet. ; To Setup Keyboard/Joysticks: In Emulator, go to Options>Keyboard. But...Fyi....The DEFAULT joystick input is as follows (all on number pad): ;...........................Player 1..........Player 2 ; Up........................Num5............Num/ ; Down...................Num2............Num8 ; Left.....................Num1.............Num7 ; Right...................Num3.............Num9 ; Button.................NumEnter......Num+ ; Set fullscreen mode in Global Module Settings in HLHQ (and fullscreen equals maximized window because fullscreen emulator seems to act odd). ; Roms must be named exactly as they are referred to in module. This is because there are four ways (i.e. four systems) to load different roms and the module assigns the rom to the right loading process based upon its full name. ;---------------------------------------------------------------------------- StartModule() BlockInput, On FadeInStart() 7z(romPath, romName, romExtension, 7zExtractPath) settingsFile := modulePath . "\" . moduleName . ".ini" Fullscreen := IniReadCheck(settingsFile, "Settings", "Fullscreen","true",,1) SetKeyDelay, 200 Run(executable, emuPath) WinWait(" DCHector - Micronique Hector emulator ahk_class Hector") WinWaitActive(" DCHector - Micronique Hector emulator ahk_class Hector") Sleep, 100 WinMenuSelectItem, ahk_class Hector, , Options, Settings WinWait(" DCHector settings ahk_class #32770") WinWaitActive(" DCHector settings ahk_class #32770") Sleep,2000 ;These games are played via Hector 1 Computer if (romName = "addition_hector1" or romName = "asteroides_hector1" or romName = "base_spatiale_hector1" or romName = "chatbyrinthe_hector1" or romName = "combat_hector1" or romName = "cow-boys_hector1" or romName = "crazy8_hector1" or romName = "credits-avec-imprimante_hector1" or romName = "credits-sans-imprimante_hector1" or romName = "dogfight_hector1" or romName = "encerclement_hector1" or romName = "envahisseurs_hector1" or romName = "flipper_hector1" or romName = "formule1_hector1" or romName = "galaxius_hector1" or romName = "goofygolf_hector1" or romName = "grenouille_hector1" or romName = "jeu-de-la-vie_hector1" or romName = "knockdown_hector1" or romName = "la-caverne-des-lutins_hector1" or romName = "le-baroudeur_hector1" or romName = "le-glouton_hector1" or romName = "le-pendu_hector1" or romName = "piranhas_hector1" or romName = "sous-marin_hector1") { Loop, 3 { ControlClick, Button5, DCHector settings Sleep,500 } Loop, 25 { ControlClick, Button5, DCHector settings Sleep,10 } Sleep, 1000 Loop,5 { IfWinExist, DCHector settings ahk_class #32770 { Sleep, 100 ControlSend, Button31, {Enter}, DCHector settings ahk_class #32770 } } Sleep,500 Loop,5 { IfWinExist, DCHector Setting modification ahk_class #32770 { Sleep, 100 ControlSend, Button1, {Enter}, DCHector Setting modification ahk_class #32770 } } Sleep, 500 WinWait(" DCHector - Micronique Hector emulator ahk_class Hector") WinWaitActive(" DCHector - Micronique Hector emulator ahk_class Hector") WinActivate, DCHector - Micronique Hector emulator ahk_class Hector Sleep,1000 WinMenuSelectItem, ahk_class Hector, , File, Load Tape Sleep,3000 Loop { ControlGetText, edit1Text, Edit1, Open ahk_class #32770 If ( edit1Text = romPath . "\" . romName . romExtension ) Break Sleep, 200 ControlSetText, Edit1, %romPath%\%romName%%romExtension%, Open ahk_class #32770 } Sleep, 3000 Loop,5 { IfWinExist, Open ahk_class #32770 { Sleep, 100 ControlSend, Button1, {Enter}, Open ahk_class #32770 } } Sleep, 3000 SetKeyDelay, 50 Send {l down} Sleep,1000 Send {l up} } ;These games are played via Interact Computer if (romName = "addemup_interact" or romName = "attro_logic_interact" or romName = "backgammon_interact" or romName = "blackjack_interact" or romName = "hangman_interact" or romName = "knockdown_interact") { Loop, 3 { ControlClick, Button6, DCHector settings Sleep,500 } Loop, 25 { ControlClick, Button6, DCHector settings Sleep,10 } Sleep, 1000 Loop,5 { IfWinExist, DCHector settings ahk_class #32770 { Sleep, 100 ControlSend, Button31, {Enter}, DCHector settings ahk_class #32770 } } Sleep,500 Loop,5 { IfWinExist, DCHector Setting modification ahk_class #32770 { Sleep, 100 ControlSend, Button1, {Enter}, DCHector Setting modification ahk_class #32770 } } Sleep, 500 WinWait(" DCHector - Micronique Hector emulator ahk_class Hector") WinWaitActive(" DCHector - Micronique Hector emulator ahk_class Hector") WinActivate, DCHector - Micronique Hector emulator ahk_class Hector Sleep,1000 WinMenuSelectItem, ahk_class Hector, , File, Load Tape Sleep,3000 Loop { ControlGetText, edit1Text, Edit1, Open ahk_class #32770 If ( edit1Text = romPath . "\" . romName . romExtension ) Break Sleep, 200 ControlSetText, Edit1, %romPath%\%romName%%romExtension%, Open ahk_class #32770 } Sleep, 3000 Loop,5 { IfWinExist, Open ahk_class #32770 { Sleep, 100 ControlSend, Button1, {Enter}, Open ahk_class #32770 } } Sleep, 4000 SetKeyDelay, 50 Send {l down} Sleep,1250 Send {l up} } ;These games are played via Hector 2 HR+ if (romName = "stramble_hr" or romName = "jeep-lunaire_hr" or romName = "chenille_hr") { Loop, 3 { ControlClick, Button7, DCHector settings Sleep,500 } Loop, 25 { ControlClick, Button7, DCHector settings Sleep,10 } Sleep, 1000 Loop,5 { IfWinExist, DCHector settings ahk_class #32770 { Sleep, 100 ControlSend, Button31, {Enter}, DCHector settings ahk_class #32770 } } Sleep,500 Loop,5 { IfWinExist, DCHector Setting modification ahk_class #32770 { Sleep, 100 ControlSend, Button1, {Enter}, DCHector Setting modification ahk_class #32770 } } Sleep, 500 WinWait(" DCHector - Micronique Hector emulator ahk_class Hector") WinWaitActive(" DCHector - Micronique Hector emulator ahk_class Hector") WinActivate, DCHector - Micronique Hector emulator ahk_class Hector Sleep,1000 WinMenuSelectItem, ahk_class Hector, , File, Load Tape Sleep,3000 Loop { ControlGetText, edit1Text, Edit1, Open ahk_class #32770 If ( edit1Text = romPath . "\" . romName . romExtension ) Break Sleep, 200 ControlSetText, Edit1, %romPath%\%romName%%romExtension%, Open ahk_class #32770 } Sleep, 3000 Loop,5 { IfWinExist, Open ahk_class #32770 { Sleep, 100 ControlSend, Button1, {Enter}, Open ahk_class #32770 } } Sleep, 3000 SetKeyDelay, 50 Send {1 down} Sleep,1000 Send {1 up} } ;These games are played via Hector 2 HRX if (romName = "pengo_hrx" or romName = "hep-taxi_hrx") { Loop, 3 { ControlClick, Button8, DCHector settings Sleep,500 } Loop, 25 { ControlClick, Button8, DCHector settings Sleep,10 } Sleep, 1000 Loop,5 { IfWinExist, DCHector settings ahk_class #32770 { Sleep, 100 ControlSend, Button31, {Enter}, DCHector settings ahk_class #32770 } } Sleep,500 Loop,5 { IfWinExist, DCHector Setting modification ahk_class #32770 { Sleep, 100 ControlSend, Button1, {Enter}, DCHector Setting modification ahk_class #32770 } } Sleep, 500 WinWait(" DCHector - Micronique Hector emulator ahk_class Hector") WinWaitActive(" DCHector - Micronique Hector emulator ahk_class Hector") WinActivate, DCHector - Micronique Hector emulator ahk_class Hector Sleep,1000 WinMenuSelectItem, ahk_class Hector, , File, Load Tape Sleep,3000 Loop { ControlGetText, edit1Text, Edit1, Open ahk_class #32770 If ( edit1Text = romPath . "\" . romName . romExtension ) Break Sleep, 200 ControlSetText, Edit1, %romPath%\%romName%%romExtension%, Open ahk_class #32770 } Sleep, 3000 Loop,5 { IfWinExist, Open ahk_class #32770 { Sleep, 100 ControlSend, Button1, {Enter}, Open ahk_class #32770 } } Sleep, 3000 SetKeyDelay, 50 Send {2 down} Sleep,1000 Send {2 up} } If Fullscreen = true { Sleep,1250 SetKeyDelay, 50 ;Send, {ALT down}{ENTER down}{ALT UP}{ENTER UP} WinMaximize, DCHector - Micronique Hector emulator ahk_class Hector } Sleep, 500 BlockInput, Off FadeInExit() Process("WaitClose", executable) 7zCleanUp() FadeOutExit() ExitModule() CloseProcess: FadeOutStart() Process, Close, dchector.exe Return Link to comment Share on other sites More sharing options...
bleasby Posted June 16, 2014 Share Posted June 16, 2014 if romName includes hector...load this way if romName includes interact...load this way if romName includes HR+ ...load this way if romName includes HRX ... load this way How would I do that in autohotkey? Specifically, the "if romName includes the term "interact"" portion of the idea? thanks craiganderson http://www.autohotkey.com/docs/commands/IfIn.htm http://www.autohotkey.com/docs/Functions.htm#InStr About your solution, happy that you got it working. But if they are from different systems, you should use the systemName variable instead of looking for which system they are from on their file names. Try to look at a multisystem module, like mess for an example on how to do it. You should basically use conditionals like if (systeName="Hector") ;dosomething else if (systemName="HRX") ; do something ... Link to comment Share on other sites More sharing options...
craiganderson Posted June 16, 2014 Author Share Posted June 16, 2014 My Bad for not explaining well Different "systems" but emulated all within one emulator Think Like hector, hector2, hector2+, hectorhxr kinda thing So all use same emulator but NEED to have different button (hector, hector2, hector2+, hectorhrx) clicked for different roms Sent from my Droid Mini. Link to comment Share on other sites More sharing options...
bleasby Posted June 16, 2014 Share Posted June 16, 2014 Different "systems" but emulated all within one emulator Which is the difference from MESS them? One emulator that emulates different systems. Link to comment Share on other sites More sharing options...
craiganderson Posted June 16, 2014 Author Share Posted June 16, 2014 yes. But all relayed systems like msx msx2 msx2+ etc. here is a picture of the settings popup from within the emulator see under "computer" there are four choices each game only works with one of those choices (of all related systems (like msx msx2 msx2+)) does not accept command line so using clickcontrol to click different choices/system for different games thank you very much for ur time and expertise Sent from my Droid Mini. Link to comment Share on other sites More sharing options...
bleasby Posted June 16, 2014 Share Posted June 16, 2014 If you want to use them as a single system I would follow the suggestion that I gave to you on the first post. Editing your module I would do something like this: yMEmu = DCHector MEmuV = v0.1 MURL = http://dchector.free.fr/index.html#top MAuthor = craiganderson MVersion =1.1 MCRC = iCRC = MID = MSystem = "Hector HRX" ;---------------------------------------------------------------------------- ; Notes: ; This module uses a BlockInput command which on my computer requires hyperspin and xpadder to be run as administrator. ; If Emulator Language is French and you would like English: Go to Options>Paramatres and Click "Anglais". ; In Emulator, go to Options>Settings: Click "Fast input" under Tape. Seems like a good idea to me. Has not caused a problem on my system yet. ; To Setup Keyboard/Joysticks: In Emulator, go to Options>Keyboard. But...Fyi....The DEFAULT joystick input is as follows (all on number pad): ;...........................Player 1..........Player 2 ; Up........................Num5............Num/ ; Down...................Num2............Num8 ; Left.....................Num1.............Num7 ; Right...................Num3.............Num9 ; Button.................NumEnter......Num+ ; Set fullscreen mode in Global Module Settings in HLHQ (and fullscreen equals maximized window because fullscreen emulator seems to act odd). ; Roms must be named exactly as they are referred to in module. This is because there are four ways (i.e. four systems) to load different roms and the module assigns the rom to the right loading process based upon its full name. ;---------------------------------------------------------------------------- StartModule() FadeInStart() 7z(romPath, romName, romExtension, 7zExtractPath) settingsFile := modulePath . "\" . moduleName . ".ini" micronComputer := IniReadCheck(settingsFile, "Settings|" . dbName, "Micron_Computer","Hector1",,1) ;Hector1, Interact, Hector2HRp, Hector2HRX Fullscreen := IniReadCheck(settingsFile, "Settings", "Fullscreen","true",,1) SetKeyDelay, 200 BlockInput, On Run(executable, emuPath) WinWait(" DCHector - Micronique Hector emulator ahk_class Hector") WinWaitActive(" DCHector - Micronique Hector emulator ahk_class Hector") Sleep, 100 WinMenuSelectItem, ahk_class Hector, , Options, Settings WinWait(" DCHector settings ahk_class #32770") WinWaitActive(" DCHector settings ahk_class #32770") Sleep,2000 if (micronComputer="Interact") CurrentButtom := "Button6" else if (micronComputer="Hector2HRp") CurrentButtom := "Button7" else if (micronComputer="Hector2HRX") CurrentButtom := "Button8" else ;micronComputer="Hector1" CurrentButtom := "Button5" Loop, 3 { ControlClick, %CurrentButtom%, DCHector settings Sleep,500 } Loop, 25 { ControlClick, %CurrentButtom%, DCHector settings Sleep,10 } Sleep, 1000 Loop,5 { IfWinExist, DCHector settings ahk_class #32770 { Sleep, 100 ControlSend, Button31, {Enter}, DCHector settings ahk_class #32770 } } Sleep,500 Loop,5 { IfWinExist, DCHector Setting modification ahk_class #32770 { Sleep, 100 ControlSend, Button1, {Enter}, DCHector Setting modification ahk_class #32770 } } Sleep, 500 WinWait(" DCHector - Micronique Hector emulator ahk_class Hector") WinWaitActive(" DCHector - Micronique Hector emulator ahk_class Hector") WinActivate, DCHector - Micronique Hector emulator ahk_class Hector Sleep,1000 WinMenuSelectItem, ahk_class Hector, , File, Load Tape Sleep,3000 Loop { ControlGetText, edit1Text, Edit1, Open ahk_class #32770 If ( edit1Text = romPath . "\" . romName . romExtension ) Break Sleep, 200 ControlSetText, Edit1, %romPath%\%romName%%romExtension%, Open ahk_class #32770 } Sleep, 3000 Loop,5 { IfWinExist, Open ahk_class #32770 { Sleep, 100 ControlSend, Button1, {Enter}, Open ahk_class #32770 } } Sleep, 4000 SetKeyDelay, 50 if (micronComputer="Hector2HRX"){ Send {2 down} Sleep,1225 Send {2 up} } else { Send {l down} Sleep,1225 Send {l up} } If Fullscreen = true { Sleep,1250 SetKeyDelay, 50 ;Send, {ALT down}{ENTER down}{ALT UP}{ENTER UP} WinMaximize, DCHector - Micronique Hector emulator ahk_class Hector } Sleep, 500 BlockInput, Off FadeInExit() Process("WaitClose", executable) 7zCleanUp() FadeOutExit() ExitModule() CloseProcess: FadeOutStart() Process, Close, dchector.exe Return and include on the same folder this ini file with the filename equal to your module name: [addemup_interact] Micron_Computer=Interact [attro_logic_interact] Micron_Computer=Interact [backgammon_interact] Micron_Computer=Interact [blackjack_interact] Micron_Computer=Interact [hangman_interact] Micron_Computer=Interact [knockdown_interact] Micron_Computer=Interact [stramble_hr] Micron_Computer=Hector2HRp [jeep-lunaire_hr] Micron_Computer=Hector2HRp [chenille_hr] Micron_Computer=Hector2HRp [pengo_hrx] Micron_Computer=Hector2HRX [hep-taxi_hrx] Micron_Computer=Hector2HRX #no need for settings games that follows the default micron computer Hector1: addition_hector1, asteroides_hector1, base_spatiale_hector1, chatbyrinthe_hector1, combat_hector1, cow-boys_hector1, crazy8_hector1, credits-avec-imprimante_hector1,credits-sans-imprimante_hector1, dogfight_hector1, encerclement_hector1, envahisseurs_hector1, flipper_hector1, formule1_hector1, galaxius_hector1, goofygolf_hector1, grenouille_hector1, jeu-de-la-vie_hector1, knockdown_hector1, la-caverne-des-lutins_hector1, le-baroudeur_hector1, le-glouton_hector1, le-pendu_hector1, piranhas_hector1, sous-marin_hector1 I hope it works for you. But you do some things that makes it very difficult to work on other users computers. - You use a lot of sleep commands. This must be avoid and used only at last resort as it is very computer dependable. - You seam to use loops to assure that you select the options that you are trying to set. This is not a good practice also. Link to comment Share on other sites More sharing options...
craiganderson Posted June 16, 2014 Author Share Posted June 16, 2014 thanks the sleep commands sometimes seem to be needed when everything is manual (click, send etc) [and i have a pretty good/fast /new computer] without them sometimes gets hung up i read that controlclick and controlsend etc are inherently unreliable and that is a known issue with ahk... so i used the loops to make sure right box gets clicked but i have not seen it cause a problem yet i realize the loops are sort of overkill but do u think they might cause a problem? they havent yet but im not an expert.. without them i noticed that with the same exact game/same exact system sometimes the box would get clicked, sometimes it would NOT and on other forums its seems that this is a known issue with those commands being unreliable,......with the short little loops (like 5) this has gone away completely>>>> i tried to use more complicated combinations of ifwinexist and ifwinnotexist to "reclick if needed" but it kept getting hung up im still learning thanks Link to comment Share on other sites More sharing options...
bleasby Posted June 16, 2014 Share Posted June 16, 2014 - About the loops Did you tested if controlGet (http://www.autohotkey.com/docs/commands/ControlGet.htm) works to retrieve the emulator micron computer button setting? If yes you can use a loop that only exits when the controlGet have the desired value set, instead of using a predefined number of iterations on the loop. You could also use the errorlevel value set by the controlClick command to know if the command was sucessful or not to know if you have to try it again. Also, did you tried to use a postmessage command instead? Something like this http://www.autohotkey.com/board/topic/96952-possible-controlclick-improve/ Using postmessages is much more reliable than any alternative. - About the sleeps Using ways to check if the controls changed, or if the correct window is active before sending a command is much better than using the sleeps top wait for the windows. If the controlGet gives you the info about the button5, 6, ... state or if you actually use the errorLevel info you don't need a sleep to wait for it to change. If you use correctly the winwait or winexist commands, you don't need sleeps for assure that these windows were created before sending your key presses. And so on. Just try to check, one at time, if you can do the same thing that you are currently achieving on your module, by using the commands that I mentioned above intead of pre defined loop interactions or sleeps. If you get ride of at least a few of the sleeps that you use you will have a much more reliable and fast module. Link to comment Share on other sites More sharing options...
craiganderson Posted June 16, 2014 Author Share Posted June 16, 2014 Thank u. Will learn about the options u described. Sent from my Droid Mini. Link to comment Share on other sites More sharing options...
craiganderson Posted June 16, 2014 Author Share Posted June 16, 2014 Question: are sleep commands computer dependent becaues they don't work on some computers or because they take longer or shorter times on different computers? Sent from my Droid Mini. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.