More ... | 編集履歴:過去のバージョン2008/02/10 03:22:50 JST時点でのHSP3のテクニック他の内容HSP3 のちょっと知られていないテクニックなどです。~% どう使うかは腕の見せ所(?)です。~% [[$$toc]] - →[[HSP関連文書]]に戻る ;;* パス区切りにスラッシュ("/")を使用する ;;HSP3 の標準命令及び #include/#addition ではファイル名のパス区切りにバックスラッシュ("\\")以外にも UNIX/Linux 同様スラッシュが使えます。~% ;;また、バックスラッシュとスラッシュは混在も可能です。~% ;;ただし、 #pack/#epack や一部の命令では使用できません(エラー表示はされないようです)。~% ;;WinOS の機能ですので外部コマンド(.com)を実行する場合などには使用できないかもしれません。~% ;;バックスラッシュのエスケープをよく忘れる人は代替で使用してみてください。~% ;;忘れないように覚えればいいだけの話。100%でない限りテクニックとしては使えない。 * oncmd 割込みには事前処理と事後処理とがあるらしい( 非公式 ) '''事前処理'''とはHSPがメッセージを処理する前に指定したラベルへ割込みが発生する処理のことで、''' oncmd gosub '''にあたる。~% '''事後処理'''とはHSPがメッセージを処理した後に指定したラベルへ割込みが発生する処理のことで、''' oncmd goto '''にあたる。 {{{ #define MODE 0 ; 0=事後/1=事前 #if MODE oncmd gosub *OnCommand, $0111 ; 本来の処理に先駆けて『事前』に割込みを発生する #else oncmd goto *OnCommand, $0111 ; 本来の処理を行った『後』に割込みを発生する #endif chkbox "hello",n *watch wait 1: title "現在値 = "+n: goto *watch stop *OnCommand mes "割込み発生時 = "+n #if MODE return #else goto *watch #endif }}} * DLL 関数のアドレス取得 実は varptr 関数で変数と同様に DLL 関数のアドレス(ポインタ)を取得できます。~% ヘルプにも書かれているのですが意外と知られていないようです。~% なお、標準命令/関数、ユーザー定義命令/関数などではできません。~% {{{ #uselib "user32.dll" #func MessageBox "MessageBoxA" int, sptr, sptr, int func = varptr(MessageBox) ; 関数のアドレス取得 mes strf("%08x", func) ; アドレス表示(16進数) buf = "テスト" prm = hwnd, varptr(buf), varptr(buf), 0 mes callfunc(prm, func, 4) ; 関数実行 stop }}} |