Win32API質問箱 Build80
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/06/04(木) 04:25:40やさしいお兄さんやお姉さんたちが答えてくれるかも。
「知らないならレスしないで下さい。ウザイだけです。 」なんて言わないでねっ!
過去スレ、関連リンクは>>2-10くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn2.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
- Win32API質問箱 wiki
http://wiki.livedoor.jp/program1/d/FrontPage
Win32API質問箱 Build79
http://pc12.2ch.net/test/read.cgi/tech/1240411224/
0175デフォルトの名無しさん
2009/06/19(金) 23:31:53他にアイデアがあれば書いといてあげて。
0176デフォルトの名無しさん
2009/06/19(金) 23:33:140177デフォルトの名無しさん
2009/06/19(金) 23:36:280178デフォルトの名無しさん
2009/06/19(金) 23:57:570179デフォルトの名無しさん
2009/06/20(土) 02:31:110180153 ◆D9KRK95MhY
2009/06/20(土) 10:55:44164さんのビットマップから作る方法を検討してみます。
0181デフォルトの名無しさん
2009/06/20(土) 13:46:04漢字仮名まじりの文をIMEを使って全部ひらがなに逆変換したいんですが、
漢字仮名まじりの文をIMEに設定する関数 ImmSetCompositionString(himc, SCS_SETSTR, str, length, NULL, 0)が
MSIME2002では成功するのにATOK2006では失敗します。
一応MSIMEでは動くものが作れたんですが、ぶっちゃけクソ変換なので、できればATOKを活用したいのです。
何か別の方法がないでしょうか?
ネットで調べても変換操作をしたあとの再変換の方法ならあるんですが、
漢字仮名まじりの文をIMEに設定して逆変換する方法で、ATOKで成功するものが見つけられないんです。
0182デフォルトの名無しさん
2009/06/20(土) 13:51:170183デフォルトの名無しさん
2009/06/20(土) 13:59:03ATOKだと文脈を理解して適切な読み仮名に変換してくれるはずなので、それに期待してるのです。
0184デフォルトの名無しさん
2009/06/20(土) 14:04:21これでうまくいっても、PGでの対応方法は知らないけど。
0185デフォルトの名無しさん
2009/06/20(土) 15:39:29それはOFFになってましたね。
試しにONにしてみると、MSIMEでも逆変換できなくなってしまいました。。。
「詳細なテキストサービスをオフにする」のチェックも変えましたが、こちらは変化なしでした。
Immで始まるIME制御APIは自分が試した大部分でATOKとMSIMEの間で互換性がありました。
しかしIMEとは無関係のところからもってきた文を逆変換することに関してだけは互換性が無いようなのです。
ATOK12ではできたという話がネット上にありましたが、ATOK2006はその方法ではダメでした。
難しいですね。
0186デフォルトの名無しさん
2009/06/20(土) 16:34:41今はコントロールとクライアントの二つをGetWindoxRectでスクリーン座標から強引に求めてるが
どうも違う
0187デフォルトの名無しさん
2009/06/20(土) 16:43:25MapWindowPoints関数を使え。
0188デフォルトの名無しさん
2009/06/20(土) 16:59:52直す気ないのかな?
0189デフォルトの名無しさん
2009/06/20(土) 17:00:310190デフォルトの名無しさん
2009/06/20(土) 17:01:21ImmGetConversionList でいけるはず
0191デフォルトの名無しさん
2009/06/20(土) 17:26:14IME2003以降では使えないけどな
0192デフォルトの名無しさん
2009/06/20(土) 17:47:12自分で調べろ
0193デフォルトの名無しさん
2009/06/20(土) 17:48:370194デフォルトの名無しさん
2009/06/20(土) 17:48:590195デフォルトの名無しさん
2009/06/20(土) 18:01:34OSで応答する分APIが遅い
0196デフォルトの名無しさん
2009/06/20(土) 18:52:31有難うございます!!
0197デフォルトの名無しさん
2009/06/20(土) 18:54:46は?
0198デフォルトの名無しさん
2009/06/20(土) 19:11:46#pragma data_seg(".ShareForHook")
HHOOK MouseHook = NULL;
#pragma data_seg()
を眼にするんだが、何でこれをする意味が良く分からない。
単純にHHOOK MouseHook = NULL;じゃ駄目なの?
0199デフォルトの名無しさん
2009/06/20(土) 19:15:11その中で宣言された変数はどこのプロセスで変更しても全てのプロセスに伝わるわけだ
何で必要なのかはCallNextHookExの第一引数見れば分かる
2000以降は要らないんだっけかな
0200デフォルトの名無しさん
2009/06/20(土) 19:15:120201デフォルトの名無しさん
2009/06/20(土) 19:26:23ライブラリの関数は同じ実行ファイル内にリンクされるのでコストは自分と定義した関数と同じ
APIの場合は、IPCを通じてOS内部にある関数本体のアドレスに引数を渡して結果を受け取るためコスト増
0202デフォルトの名無しさん
2009/06/20(土) 19:31:040203デフォルトの名無しさん
2009/06/20(土) 19:34:530204デフォルトの名無しさん
2009/06/20(土) 19:36:310205デフォルトの名無しさん
2009/06/20(土) 19:37:020206デフォルトの名無しさん
2009/06/20(土) 19:38:39有難う!
MSDNでのSetWindowsHookEx関数では
>グローバルフックは共有リソースであり
と書いてあった
正直まだ解せない部分もあるけど、システムフックの最低限必要のマナーなのね
0207199
2009/06/20(土) 19:43:480208デフォルトの名無しさん
2009/06/20(土) 20:15:170209デフォルトの名無しさん
2009/06/20(土) 21:39:29ImmGetConversionListを使う方法を教えていただき、どうもありがとうございました。
結論からすると、やはり逆変換はMSIME2002ではできて、ATOK2006ではできなかったです。
ソースコードは下記をそのまま使いました。
http://athomejp.com/goldfish/api/yomichange.asp
ATOKの2006は鬼門バージョンなんですかねw
0210デフォルトの名無しさん
2009/06/20(土) 21:54:53あとは、実際の動作をエミュレートするかだな。
0211デフォルトの名無しさん
2009/06/20(土) 21:56:13LeftとRightとかBeginとEndとか
長さが違うのが無性に腹立つんだが
欧米人には美的感覚ってものが無いのか?
0212デフォルトの名無しさん
2009/06/20(土) 22:02:25まずプログラミング言語ありきってか
0213デフォルトの名無しさん
2009/06/20(土) 22:12:340214190
2009/06/21(日) 00:06:522006ではだめですか。ATOK2005は確か出来たはずなんですが… 残念です。
0215sage
2009/06/21(日) 01:02:46IFELanguageを使ってるが。
0216デフォルトの名無しさん
2009/06/21(日) 13:30:24MSDNだとインターネット接続していないと読めないので
0217デフォルトの名無しさん
2009/06/21(日) 13:45:41英語でよければ
http://ghirai.com/hutch/files/win32hlp_big.zip
0218デフォルトの名無しさん
2009/06/21(日) 14:05:47ローカル版のMSDNライブラリ
http://www.microsoft.com/downloads/details.aspx?familyid=7BBE5EDA-5062-4EBB-83C7-D3C5FF92A373&displaylang=ja
0219デフォルトの名無しさん
2009/06/21(日) 14:11:222627.9 MBって大変だな。
0220デフォルトの名無しさん
2009/06/21(日) 15:30:10一番高速な方法はどんなものでしょうか?
0221デフォルトの名無しさん
2009/06/21(日) 15:42:17アルファブレンドをするのであれば
http://d.hatena.ne.jp/n7shi/20080323/1231278248
0222デフォルトの名無しさん
2009/06/21(日) 16:39:090223デフォルトの名無しさん
2009/06/21(日) 16:46:000224デフォルトの名無しさん
2009/06/21(日) 20:22:41どこにあるかご存知の方おられますか?
0225デフォルトの名無しさん
2009/06/21(日) 20:43:27site:microsoft.com wzcでググったらこれが見付かったんだけど違う?
Wireless Zero Configuration Reference
http://msdn.microsoft.com/en-us/library/ms706593.aspx
0226デフォルトの名無しさん
2009/06/21(日) 20:54:18ありがとう、MSDNは見たはずなんだが抜かってたか・・・
0227デフォルトの名無しさん
2009/06/21(日) 21:42:41プログラム起動時に、メインウィンドウとステータスバーのスタイルを弄ると
WM_DRAWITEMの通知の際、CtrlTypeがODT_MENUになるんだが何故?
今まではswitchのdefaultでステータスバーを描画してたが
今はCtrlIDで分岐して描画してる。綺麗な方法じゃないけどね
0228デフォルトの名無しさん
2009/06/21(日) 22:00:34CtrlIDで分岐するのはむしろ正解っぽい。
0229デフォルトの名無しさん
2009/06/21(日) 22:27:16そうなのかっ
ODT_TABとか色々使ってるから、今更IDで判断なんて面倒すぎだぞ…
とりあえずステータスバーだけIDで判断する。有難うね。
0230デフォルトの名無しさん
2009/06/21(日) 22:30:03それとも関数を呼び出すところで初めてチェックされる?
0231デフォルトの名無しさん
2009/06/21(日) 22:37:00Win2k以降のAPIを静的リンクしたEXEを98で実行したら速攻でエラー落ちした
0232デフォルトの名無しさん
2009/06/21(日) 22:42:33自分も書き込んだ後実験して起動時に落ちたわ
0233デフォルトの名無しさん
2009/06/21(日) 22:53:56dllを遅延ロードにすると、初めて読んだところで例外が発生する。
0234デフォルトの名無しさん
2009/06/22(月) 00:16:13静的リンクと呼びたくなるのは分かるが、それは静的リンクじゃなくて暗黙(的)リンクが正しい。
0235デフォルトの名無しさん
2009/06/22(月) 00:41:200236デフォルトの名無しさん
2009/06/22(月) 01:26:000237デフォルトの名無しさん
2009/06/22(月) 01:55:58日本語の項目が少ないとかそういうのか?
0238デフォルトの名無しさん
2009/06/22(月) 02:16:13.NETのSocketクラスが載ってなかったりした。
0239デフォルトの名無しさん
2009/06/22(月) 09:30:50hBitmap = CreateCompatibleBitmap( hDC, 200, 200 );
SelectObject( hDCBuffer, hBitmap );
と
for( int i = 0 ; i < 3 ; i++ ) {
hDCBuffer[i] = CreateCompatibleDC( hDC );
hBitmap[i] = CreateComaptbileBitmap( hDC, 50, 50 );
SelectObject( hDCBuffer[i], hBitmap[i] );
}
では、最初の奴の方がメモリは少なく済むんだよね?
0240デフォルトの名無しさん
2009/06/22(月) 10:04:070241デフォルトの名無しさん
2009/06/22(月) 12:05:20分かっているんですが
GetDC()をnewした場合はReleaseDC()をした後に
deleteをしなければならないのでしょうか?
教えてください。
0242デフォルトの名無しさん
2009/06/22(月) 12:23:47とりあえず、"GetDB()をnewする" のソースコードを書いてみろ
0243デフォルトの名無しさん
2009/06/22(月) 12:24:27HDC *phdc = new HDC;
*phdc = GetDC( ... );
ていうことならWin32 API以前にC++の問題。
0244デフォルトの名無しさん
2009/06/22(月) 12:26:08new ⇔ delete の対は (多分)C++ の要求
0245241
2009/06/22(月) 13:20:12HDC *phdc = new HDC;
*phdc = GetDC( ... );
の後に、
ReleaseDC(phdc);
delete phdc;
としなければならないか?
と言う事です。
>>244さんの返答からして必要そうな感じはしていますが。。。
0246デフォルトの名無しさん
2009/06/22(月) 13:29:00もっと基本的な部分から勉強しなおした方がいいと思う。
new/deleteはAPIの動作とまったく関係ない.し、newで確保したメモリがReleaseDCで解放されることはない。
0249109
2009/06/22(月) 19:26:28Windows上で任意のいろんなソフトが動いていて、それぞれのソフトが音を出したり出さなかったりするわけですけど、
それらすべての音をスピーカーに出力しながら音声認識して文字で表示するようなものを作りたいのです。
スピーカー出力をマイク入力に直結するようなやり方はしたくありません。
0250デフォルトの名無しさん
2009/06/22(月) 19:34:330251デフォルトの名無しさん
2009/06/22(月) 19:47:180252デフォルトの名無しさん
2009/06/22(月) 20:29:08ステレオミキサーで検索
0253デフォルトの名無しさん
2009/06/22(月) 20:34:44GetThreadId
0255デフォルトの名無しさん
2009/06/23(火) 03:59:15今はレジストリのRunに登録して自動実行していますが,これだと管理者権限で
起動できません.かといってrequireAdministratorを設定すればOS起動時にUAC
が出てきてしまいます.
OSはVista 32-bitを使用しています.
0256デフォルトの名無しさん
2009/06/23(火) 04:02:320257デフォルトの名無しさん
2009/06/23(火) 04:05:140258デフォルトの名無しさん
2009/06/23(火) 07:17:570259デフォルトの名無しさん
2009/06/23(火) 10:40:55OS起動時ならサービスに、ログイン時ならタスクで
0260デフォルトの名無しさん
2009/06/23(火) 10:45:15追加されたポップアップメニューを破棄すれば追加したのも一緒に破棄される?
0261デフォルトの名無しさん
2009/06/23(火) 10:45:28サービスが確実。
0262デフォルトの名無しさん
2009/06/23(火) 15:47:100263255
2009/06/23(火) 17:15:021. 自作常駐ソフトをサービス化する
2. 他のサービスプログラムを作り,そのサービスから自作常駐ソフトを起動するようにする
現在管理者権限で起動したい常駐ソフトが2個ほどあるので,1の方法より汎用性が高い2
の方法を検討しているのですが,サービスから起動するプロセスは管理者権限を得られる
のでしょうか?
0264デフォルトの名無しさん
2009/06/23(火) 18:23:570265デフォルトの名無しさん
2009/06/23(火) 18:49:540266デフォルトの名無しさん
2009/06/23(火) 20:42:09|| [最上位の特権で実行する] チェック ボックスをオンにすると、
|| タスク スケジューラは、最小限の特権 (UAC) トークンではなく
|| 管理者特権トークンを使用してタスクを実行します。
ってあるじゃん。わざわざ作るまでもなく、タスクスケジューラで OK
0267デフォルトの名無しさん
2009/06/23(火) 20:47:510268デフォルトの名無しさん
2009/06/23(火) 20:51:380269デフォルトの名無しさん
2009/06/23(火) 21:16:150270デフォルトの名無しさん
2009/06/23(火) 21:18:54ファイルが読み書きできれば、フォーマットされてる。
0271デフォルトの名無しさん
2009/06/23(火) 21:54:280272デフォルトの名無しさん
2009/06/23(火) 22:17:54実行するユーザーが管理者権限無いと管理者にはならないよ、あたりまえだけど。
0273デフォルトの名無しさん
2009/06/23(火) 22:43:38dll.cpp
extern "C" __declspec(dllexport) int __stdcall sq(int x);
int __stdcall sq(int x) {return x * x;};
コマンドプロンプトで
dumpbin /SYMBOLS dll.lib
0274デフォルトの名無しさん
2009/06/23(火) 22:45:13どこにもsqがでてきません・・・ちなみにコンパイラはVC++2008EEです
COFF SYMBOL TABLE
000 00937809 ABS notype Static | @comp.id
001 00000000 SECT2 notype External | __IMPORT_DESCRIPTOR_dll
002 C0000040 SECT2 notype Section | .idata$2
003 00000000 SECT3 notype Static | .idata$6
004 C0000040 UNDEF notype Section | .idata$4
005 C0000040 UNDEF notype Section | .idata$5
006 00000000 UNDEF notype External | __NULL_IMPORT_DESCRIPTOR
007 00000000 UNDEF notype External | dll_NULL_THUNK_DATA
String Table Size = 0x4A bytes
■ このスレッドは過去ログ倉庫に格納されています