フォーラム: OpenMIDIProject forum (スレッド #38277)

How to send commands (2017-01-02 20:19 by Alain #79197)

I'm considering to use Sekaiju as a midi recorder but not using the GUI but as a hidden program.
Then i'll have to send commands (record, stop, save, load, play...) to Sekaiju.
I've seen then Alt-x or Ctrl+x options, but it needs to get then handles of the target windows...
Would it be possible to send commands to Sekaiju through the midi input ?
Or any other way...
Thank you for your help.
Alain

メッセージ #79197 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

Re: How to send commands (2017-01-03 20:32 by kuzu #79199)

Thank you for using Sekaiju.

>Would it be possible to send commands to Sekaiju through the midi input ?
MIDI supports only following control commands. For detail, please see documentation's page.

* Song Position Selector {0xF2, 0xLL, 0xMM}
* MIDI Clock {0xF8}
* Start {0xFA} (for playing)
* Continue {0xFB} (for playing)
* Stop {0xFC}

There is no command for recording, loading, saving etc.
But Sekaiju is opensouce. Though it is hard, it is free to add your original command by yourself.

>It needs to get then handles of the target windows...

For getting Sekaiju's main window's handle from the other program, you need to use FindWindow function like following.

HWND hWnd = FindWindow (_T("Sekaiju4.9"), NULL);
PostMessage (hWnd, COMMAND, WPARAM, LPARAM);

But in Sekaiju's program, you can get main window's handle easily.

CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd ();
pMainFrame->PostMessage (COMMAND, WPARAM, LPARAM);

CSekaijuApp* pSekaijuApp = (CSekaijuApp*)AfxGetApp ();
pSekaijuApp->PostMessage (COMMAND, WPARAM, LPARAM);


If you simply want additional shortcut key, please modify SekaijuEnu.rc by text editor and compile it, and then you will get your original SekaijuEnu.dll.

//-----------------------------------------------------------------------------
// Accelerators
//-----------------------------------------------------------------------------

// Common Accelerators
IDR_MAINFRAME ACCELERATORS PRELOAD MOVEABLE PURE
BEGIN
"N", ID_FILE_NEW, VIRTKEY,CONTROL
"O", ID_FILE_OPEN, VIRTKEY,CONTROL
"S", ID_FILE_SAVE, VIRTKEY,CONTROL
"P", ID_FILE_PRINT, VIRTKEY,CONTROL
"Z", ID_EDIT_UNDO, VIRTKEY,CONTROL
"Y", ID_EDIT_REDO, VIRTKEY,CONTROL
"X", ID_EDIT_CUT, VIRTKEY,CONTROL
"C", ID_EDIT_COPY, VIRTKEY,CONTROL
"V", ID_EDIT_PASTE, VIRTKEY,CONTROL
"A", ID_EDIT_SELECTALL, VIRTKEY,CONTROL
"D", ID_EDIT_SELECTNONE, VIRTKEY,CONTROL
VK_DELETE, ID_EDIT_DELETE, VIRTKEY,CONTROL
VK_F6, ID_NEXT_PANE, VIRTKEY
VK_F6, ID_PREV_PANE, VIRTKEY,SHIFT
VK_SPACE, ID_CONTROL_PLAY, VIRTKEY
VK_HOME, ID_CONTROL_TOBEGIN, VIRTKEY,CONTROL
VK_END, ID_CONTROL_TOEND, VIRTKEY,CONTROL
VK_PRIOR, ID_CONTROL_PREVMEASURE, VIRTKEY,CONTROL
VK_NEXT, ID_CONTROL_NEXTMEASURE, VIRTKEY,CONTROL
VK_LEFT, ID_CONTROL_PREVMEASURE, VIRTKEY,CONTROL
VK_RIGHT, ID_CONTROL_NEXTMEASURE, VIRTKEY,CONTROL
"R", ID_CONTROL_RECORD, VIRTKEY,CONTROL
END
#79197 への返信

メッセージ #79199 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

Re: How to send commands (2017-01-06 17:05 by Alain #79213)

Thank you for this detailled answer.
I'll check all that !
#79199 への返信

メッセージ #79213 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

Re: How to send commands (2017-03-14 07:55 by handmusician #79541)

[Répondre à un message #79213]
> Thank you for this detailled answer.
> I'll check all that !


You can also use autoit (freeware https://www.autoitscript.com/site/autoit/) for sending commands to sekaiju window.using controlsend() command.like this :

controlsend("[CLASS:Sekaiju4.9]","","ToolbarWindow322","^r")

The last parameter is the keys sent to sekaiju to play, save... :

^r = record
{SPACE}= Play/stop
^{HOME} = Jump to the Begin
^{END} = jump to the end
^o = open
^s = save



It won't works if you minimize sekaiju window though, but if you want to hide it, you can just add (0 = hide, 1 = visible):

winsetstate("[CLASS:Sekaiju4.9]","",0)

and then winclose("[CLASS:Sekaiju4.9]") or winkill(""[CLASS:Sekaiju4.9]") at the end of your program to close the hidden window.

With autoit you can compile to make an exe file, then you can execute the exe from others programs.
#79213 への返信

メッセージ #79541 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

Re: How to send commands (2017-03-14 08:05 by handmusician #79542)

[Répondre à un message #79541]
> [Répondre à un message #79213]
> > Thank you for this detailled answer.
> > I'll check all that !
>
>
> You can also use autoit (freeware https://www.autoitscript.com/site/autoit/) for sending commands to sekaiju window.using controlsend() command.like this :
>
> controlsend("[CLASS:Sekaiju4.9]","","ToolbarWindow322","^r")
>
> The last parameter is the keys sent to sekaiju to play, save... :
>
> ^r = record
> {SPACE}= Play/stop
> ^{HOME} = Jump to the Begin
> ^{END} = jump to the end
> ^o = open
> ^s = save
>
>
>
> It won't works if you minimize sekaiju window though, but if you want to hide it, you can just add (0 = hide, 1 = visible):
>
> winsetstate("[CLASS:Sekaiju4.9]","",0)
>
> and then winclose("[CLASS:Sekaiju4.9]") or winkill(""[CLASS:Sekaiju4.9]") at the end of your program to close the hidden window.
>
> With autoit you can compile to make an exe file, then you can execute the exe from others programs.


And you can even read the value of timer, measure, time/key signature and tempo using :
controlgettext("[CLASS:Sekaiju4.9]","","Edit2")
controlgettext("[CLASS:Sekaiju4.9]","","Edit3")
controlgettext("[CLASS:Sekaiju4.9]","","Edit4")
controlgettext("[CLASS:Sekaiju4.9]","","Edit5")
#79541 への返信

メッセージ #79542 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

Re: How to send commands (2017-06-03 22:21 by Alain #79918)

I'm already using AutoIt for others aspects of the application.
But i never used this type of commands (controlsend) juste simulating keyboard entry.
I'll have to work in this direction.
To be sure, is it possible in the ^r command to specifiy the path and the name of the midi file ?
controlsend("[CLASS:Sekaiju4.9]","","ToolbarWindow322","^r")
#79542 への返信

メッセージ #79918 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

Re: How to send commands (2017-06-03 22:41 by Alain #79919)

[Répondre à un message #79918]
> I'm already using AutoIt for others aspects of the application.
> But i never used this type of commands (controlsend) juste simulating keyboard entry.
> I'll have to work in this direction.
> To be sure, is it possible in the ^r command to specifiy the path and the name of the midi file ?
> controlsend("[CLASS:Sekaiju4.9]","","ToolbarWindow322","^r")
====
In fact my question about the name of the file is of course for commands ^o and ^s
Where could read documentation about these commands. I looked in the user guide but no success
#79918 への返信

メッセージ #79919 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

Re: How to send commands (2017-10-12 11:53 by handmusician #80339)

[Répondre à un message #79919]
> [Répondre à un message #79918]
> > I'm already using AutoIt for others aspects of the application.
> > But i never used this type of commands (controlsend) juste simulating keyboard entry.
> > I'll have to work in this direction.
> > To be sure, is it possible in the ^r command to specifiy the path and the name of the midi file ?
> > controlsend("[CLASS:Sekaiju4.9]","","ToolbarWindow322","^r")
> ====
> In fact my question about the name of the file is of course for commands ^o and ^s
> Where could read documentation about these commands. I looked in the user guide but no success


^o, ^s are keystrokes control+o, control+s sent to sekaiju window (in File menu you can see these shortcuts). You can look "Send" in the user guide for keystrokes, Send is used for sending only to the active window, while controlsend is for a specified control of a specified window not only the active one.

So the command ^o just say to Sekaiju to launch the window "Open" while ^s launch "Save As" if it's a new file and resave if it's an already opened or saved file.
To do what you want you can add winwait then controlsend again and to finish controlclick :

controlsend("[CLASS:Sekaiju4.9]","","ToolbarWindow322","^r")
winwait("Open")
controlsend("Open","","[CLASS:Edit; INSTANCE:1]","the full path to the file")
controlclick("Open","","[CLASS:Button; INSTANCE:2]")

winwait("Save As")
controlsend("Save As","","[CLASS:Edit; INSTANCE:1]","the full path to the new file")
controlclick("Save As","","[CLASS:Button; INSTANCE:2]")
#79919 への返信

メッセージ #80339 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

Re: How to send commands (2017-10-12 11:57 by handmusician #80340)

[Répondre à un message #80339]
> [Répondre à un message #79919]
> > [Répondre à un message #79918]
> > > I'm already using AutoIt for others aspects of the application.
> > > But i never used this type of commands (controlsend) juste simulating keyboard entry.
> > > I'll have to work in this direction.
> > > To be sure, is it possible in the ^r command to specifiy the path and the name of the midi file ?
> > > controlsend("[CLASS:Sekaiju4.9]","","ToolbarWindow322","^r")
> > ====
> > In fact my question about the name of the file is of course for commands ^o and ^s
> > Where could read documentation about these commands. I looked in the user guide but no success
>
>
> ^o, ^s are keystrokes control+o, control+s sent to sekaiju window (in File menu you can see these shortcuts). You can look "Send" in the user guide for keystrokes, Send is used for sending only to the active window, while controlsend is for a specified control of a specified window not only the active one.
>
> So the command ^o just say to Sekaiju to launch the window "Open" while ^s launch "Save As" if it's a new file and resave if it's an already opened or saved file.
> To do what you want you can add winwait then controlsend again and to finish controlclick :
>
> controlsend("[CLASS:Sekaiju4.9]","","ToolbarWindow322","^r")
> winwait("Open")
> controlsend("Open","","[CLASS:Edit; INSTANCE:1]","the full path to the file")
> controlclick("Open","","[CLASS:Button; INSTANCE:2]")
>
> winwait("Save As")
> controlsend("Save As","","[CLASS:Edit; INSTANCE:1]","the full path to the new file")
> controlclick("Save As","","[CLASS:Button; INSTANCE:2]")

"^o" for "Open" not "^r" sorry !
#80339 への返信

メッセージ #80340 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする