1 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 23:33:42 ] スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。 やさしいお兄さんやお姉さんたちが答えてくれるかも。 過去スレ、関連リンクは>>2-10 くらい。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。英語版(msdn2.microsoft.com/library/ )の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで - Win32API質問箱 wiki wiki.livedoor.jp/program1/d/FrontPage Win32API質問箱 Build65 pc11.2ch.net/test/read.cgi/tech/1208847084/
876 名前:853 mailto:sage [2008/06/06(金) 07:37:22 ] >>863 回答ありがとうございます. EM_GETSEL は有力ですよね. 実は自分も最初はそれを考えて, pt.x = LOWORD(SendMessage(hEdit , EM_GETSEL , NULL , NULL)); として列の位置を求めようとしていたのですが, ↓(1行,1列) 1234\r\n 6 ↑(2行,1列)になってほしいけど, 実際には(2行,6列)... ORZ という結果になってハマってしまったので, ここで質問してみました. 結構メジャーな目的なので,どなたかご存知の方が いらっしゃいましたら良い方法をお願いします. m(_ _)m 後の人のためにも. (できればWin32APIで,テキスト全体をバッファに入れて改行を数えるとかは 最後の手段かなと思っています.)
877 名前:853 mailto:sage [2008/06/06(金) 08:11:01 ] 解決しました. offset = LOWORD(SendMessage(hEdit, EM_CHARFROMPOS, 0, MAKELPARAM((WORD)0, pixPt.y))); を設定して引いてやるだけでした. 前にこの方法も試していたのですが,pix での位置と char型 での位置が きちんと区別されていなかったために失敗していました. お騒がせしました.
878 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 14:45:22 ] (WORD)0 なんでこんな書き方するのか分からん
879 名前:デフォルトの名無しさん [2008/06/06(金) 15:22:28 ] 分からないならレスするなつってるだろ?
880 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 15:38:14 ] すいません
881 名前:デフォルトの名無しさん [2008/06/06(金) 15:41:37 ] どんまい
882 名前:デフォルトの名無しさん [2008/06/06(金) 16:14:32 ] 吸いませんじゃなくてすみませんだろ?
883 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 16:17:57 ] 吸わないよ
884 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 16:23:21 ] (WORD)0 なんでこんな書き方するのか分からん
885 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 16:25:28 ] break;
886 名前:デフォルトの名無しさん [2008/06/06(金) 16:59:07 ] 訳:かまってほしいな
887 名前:いのぶー mailto:sage [2008/06/06(金) 22:01:53 ] 皆様、ありがとうございます。 sendInputというキーワードのおかげで、下記のページを見つけることができました。 homepage3.nifty.com/midori_no_bike/CS/index.html?userIO.268 おかげで、sendInputを使って、点が打てました。 これを取っ掛かりになんとかやってみたいと思います。
888 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 23:10:33 ] >>872 GetClientRectでとれるのが「クライアント領域」、早い話がウィンドウ内部の領域 マウスイベントで指定する座標系はこれが基準。 GetWindowRectでとれるのは「ウィンドウ領域」、境界線とかも含んでいるので 一般にクライアント領域より大きい。 ちなみにRectで指定する座標は「右と下が1大きい」ものなので(理由は省略) >866の計算だと、GetClientRectの結果使ったとしてもやはり1ドットはみだす。 以上参考までに。
889 名前:いのぶー mailto:sage [2008/06/06(金) 23:31:46 ] 888さん、ありがとうございます。(ゾロ目ですね・・・) GetClientRectでとれる「クライアント領域」が基本とのことなのですが、 GetWindowRectでドローイングエリアの座標領域を取って、Cursorを動かして、 SendInputクリックで左ボタンダウンとアップイベントを作ってクリックしているのですが、 「クライアント領域」を使った、いい方法があるのでしょうか? 当方、「クライアント領域」の有効な使い方が解っていないので、 よろしければご教授願えませんでしょうか。教えていただけると うれしいのですが・・・
890 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 00:16:53 ] >>889 有効とかどうとかじゃなくて、基本的な区別がわかってない 君がいう「ドローイングエリアの座標領域」の外側と内側とか 座標系の基準の違いとか色々ごっちゃにしてるって話 ここで説明できるような内容じゃないので入門書読め
891 名前:いのぶー mailto:sage [2008/06/07(土) 00:25:15 ] 別に、原点が画面の左上か、ウィンドウ(又はウィジェット)の左上というだけの話では?
892 名前:いのぶー mailto:sage [2008/06/07(土) 00:31:04 ] こんな風に書いているので、問題があったら知りたいなぁという以上の意味はないので・・・ // ドローイングエリアの真ん中へ移動 Cursor.Position = new Point((winRect.left + winRect.right) / 2, (winRect.top + winRect.bottom) / 2); //クリック INPUT[] input = new INPUT[2]; // 計2イベントを格納 input[0].mi.dwFlags = MOUSEEVENTF_LEFTDOWN; input[1].mi.dwFlags = MOUSEEVENTF_LEFTUP; SendInput(2, input, Marshal.SizeOf(input[0]));
893 名前:いのぶー mailto:sage [2008/06/07(土) 00:46:46 ] 追伸、 466の記述時点では、Rectで何の値が取れるか分かっていなかったのですが、 デバッグプリントして、理解して、887の時点では、なんとか好きな所に点が打てるように なっていました。 (おそらく、入れ違いになってしまったのでは・・・と思っています。) ただ、この場合に、ウィンドウ内の座標を使って何ができるのかが知りたいのです。 この場合、テンプレの本を薦められても対象が高域過ぎるのでお勧めのURLや書籍 でもあれば、明日にでも探しに行きたいと思います。
894 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 02:01:28 ] いい加減うざいです>< Win32スレなのか.NETスレなのか分かりません><
895 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 02:16:31 ] ここってWin32APIスレですよね>< 言語が.NETだろうとWin32の話なら全然構わないと思います><
896 名前:デフォルトの名無しさん [2008/06/07(土) 03:27:14 ] たとえば、スレッドの中にスレッド作った場合の注意点ってある? 開放する順番以外に。windowsスレッドって、ExitThread(true)で 自動で開放されたりしない?ハンドルクローズしないとダメ?
897 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 03:45:01 ] windowsスレッドって何だよ windows板なら分かるが
898 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 04:47:09 ] >893 何ができるかとかいう問題じゃなくて ┏━┓ ┗━┛ この枠の内側測るのと外側測るのじゃ大きさが違うだろ? 内側から測れって言われてるのに外側から測った数字使ってたりしたら 細かいところで計算が合わないからちゃんと意識しろってこと。
899 名前:896 mailto:sage [2008/06/07(土) 06:05:37 ] >>897 Linuxのプロセスみたいにゾンビプロセスが残るのかとか windows のスレッドはexitThread(true)でスレッド開放されるのかとか
900 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 06:41:38 ] スレッド自身がExitThreadを呼び出すか、スレッドの関数から戻ればスレッドは止まる。 どのスレッドによって作られたか、などということは一切関係ない。 また、そのスレッドを参照しているすべてのスレッドハンドルをCloseHandleしなければならない。 スレッドハンドルを閉じていないということは、まだ使うということだから。 スレッドがシグナル状態になっているかどうかを見るなど。 pthreadだって、明示的にpthread_joinかpthread_detachしなきゃならんだろ。
901 名前:いのぶー mailto:sage [2008/06/07(土) 06:56:28 ] > 898 取れる数字に対する注意点を教えていただいたと理解しました。 894さんとか、うざがってる方もいることですので、この話題を終了したいと思います。 ありがとうございました。
902 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 08:06:34 ] >>899 > ExitThread(true) こんな事を書いてるということはMSDN読んでないのがバレバレ
903 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:06:32 ] おいおい・・ そんなこと言ったら、ここの質問全てmsdn嫁で終わるw
904 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:25:25 ] ちょっと質問ですが、 //tmpgenc.pegasys-inc.com/ja/download/tp.html TMPGEncの支援ツールを作りたいと思ってます。 主に自動で次々と縁故してくれるように支援するツールです。 そこで、まずファイルをドロップしてファイル名を渡すところですが、ここはどんなAPIを使ってドロップしたことにしてやればよろしいでしょうか?
905 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:27:01 ] はぁ?
906 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:29:15 ] >>905 そのTMGENCの画面にファイルをドロップするところを、他のアプリから操りたいのです・・・。
907 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:47:12 ] はぁ?
908 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:47:55 ] 知らないならレスしないでください
909 名前:904 mailto:sage [2008/06/07(土) 14:50:36 ] 908は私の発言じゃないですよ。 わかりにくいですか?
910 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:53:40 ] まったく分からない
911 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:54:30 ] 初心者スレ池
912 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:55:06 ] 910は私の発言じゃないですよ。 わかりにくいですか?
913 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 15:10:01 ] TMPEGの画面ってのがよく分からんが 画面へのドロップ動作をさせたいならOLE D&Dとマウス動作のシミュレートで良いんじゃね コマンドライン使えるならそっちの方がいいと思うけど
914 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 15:12:18 ] お前は何を言ってるんだ
915 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 15:12:52 ] LoadLibraryEx で LOAD_LIBRARY_AS_DATAFILE や LOAD_LIBRARY_AS_IMAGE_RESOURCE を 指定してロードした特定のモジュールのファイル名を、GetModuleFileName で取得できません。 (GetModuleFileName の戻り値は0だが、GetLastError の戻り値は ERROR_SUCCESS) 具体的に言うと、下のページの mxdrv.dll が該当します。 ttp://gorry.haun.org/mx/ どういったケースでそれが起こるのか、誰かおわかりになりませんか。
916 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 15:27:25 ] >>913 レスありがと。 ただOLE D&Dって初見なんだけど、これってつまりAPIでファイルを対象のウィンドウにドロップするやつはないってことですか?
917 名前:916 mailto:sage [2008/06/07(土) 15:38:46 ] 自己解決しました、ありがとうございます
918 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 16:21:57 ] 英語MSDNのSendIMEMessageExに This function is obsolete and should not be used. と書いてた。 ってことは、IME使うにはどうすればいいんだ?
919 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 16:28:20 ] 質問です。 対象のアプリのボタン(OKと書かれたボタン)が操作不可かどうかを判断したいのですが、 なにか手はありますでしょうか?
920 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 16:29:48 ] フックふっくにしてやんよ
921 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 16:37:46 ] IsWindowEnabledでいいんじゃね
922 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 17:07:40 ] >>918 Imm〜関数群などを使う。
923 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 17:16:07 ] IMMの次はTSFだぜ
924 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 18:31:42 ] >>923 > TSFとは、異性への性転換を扱うフィクションのジャンルにおける略称である。 ttp://ja.wikipedia.org/wiki/TSF ???
925 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 18:38:05 ] ストリートファイターズ……
926 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 18:51:28 ] アルファベット3文字の略称って大抵は既に何かに使われてるよなw
927 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 19:26:35 ] _beginthreadexでつくったスレッドで現在稼動しているもののIDかなんかを取得するのは どうすればいいですか?Thread.currentThread()みたいなやつ
928 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 19:33:05 ] GetCurrentThread GetCurrentThreadId
929 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 19:33:19 ] IDってどういう意味だ? スレッドハンドルの事を言っているなら、_beginthreadexの戻り値がまさにそれだ。 必要ないなら、ちゃんとCloseHandleしておけ。 スレッドIDの事を言っているのなら、スレッドハンドルに対してGetThreadIdを呼べ。
930 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 19:37:06 ] >>927 GetCurrentThread
931 名前:918 mailto:sage [2008/06/07(土) 19:44:58 ] >>922 ,923 感謝する。 とりあえず今回はTSFの方向で考えてみようと思う。
932 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 19:49:55 ] >>931 え……?性転換ネタでいくの?キョン子はやめたほうが……
933 名前:931 mailto:sage [2008/06/07(土) 20:05:29 ] >>932 TextServicesFlameworkですよ(汗 ...とマジレスしてみる。
934 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:08:52 ] >>928-930 あざーした
935 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:31:21 ] >>933 Text Services Frameworkですよとマジレス
936 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:37:32 ] Flamework 燃える仕事か。
937 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:40:20 ] >>934 一応言っておくと、GetCurrentThreadで得られるのは擬似ハンドルで 自分自身のスレッドを示す事にしか使えないからな。
938 名前:933 mailto:sage [2008/06/07(土) 20:46:31 ] >>935 ,936 わざとだ。 ということにしておいてくれ。
939 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:55:32 ] >>936 仕事熱心でいいじゃないか
940 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 21:01:53 ] 炎上しているって事はデスマーチなんだろ
941 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 21:04:22 ] >>937 なんか書いてありましたね。でも _beginthreadexの最後の引数に入るDWORDのIDはGetCurrentThreadIdのものと一致しますよね? あと関係ないと思うんですが、MSDNの _endthread と _endthreadex によって、C++ デストラクタはスレッドで保留状態になり、呼び出されません。 という日本語の意味がよく分からないんですが、どういうこと?
942 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 21:14:46 ] ThreadEntry(PVOID param) { CMyClass hoge; kansuu(); } kansuu() { _enthreadex(0); } hogeのデストラクタは呼ばれませんよということ 素直にreturnしとけ
943 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 21:16:00 ] 日本語の意味が分からなかったら英語版を読めばいいだろ そもそも日本語版なんてWin95時代から更新止まってるのにそんなの見るなって
944 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 21:22:00 ] 英語MSDNのSendIMEMessageExに This function is obsolete and should not be used. と書いてた。 ってことは、IME使うにはどうすればいいんだ?
945 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 21:25:06 ] 英語MSDNのSendIMEMessageExに This function is obsolete and should not be used. と書いてた。 ってことは、IME使うにはどうすればいいんだ?
946 名前:918 mailto:sage [2008/06/07(土) 21:27:22 ] なんかコピペされてる? 何事ですか?
947 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 21:28:37 ] 英語MSDNのSendIMEMessageExに This function is obakadesu and should not be used. と書いてた。 ってことは、IME使うにはどうすればいいんだ?
948 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 22:10:57 ] MSDNのYieldのところに ウィンドウを含むスレッドでは、DispatchMessage 関数、PeekMessage 関数、または TranslateMessage 関数を使ってください。 てあるけど、どうやんのかね?
949 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 22:20:17 ] ウィンドウを作ったスレッドがなんでyieldなんかするんだよ
950 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 22:31:29 ] 知らないならレスしないでください
951 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 22:57:14 ] 糞スレ終了
952 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 00:37:08 ] 次は、まだかな♪(・ ・。)(。・ ・)まだかな♪
953 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 00:42:09 ] 質問したいんですけどいいですか?
954 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 00:44:29 ] ものによる。まずは質問して。
955 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 00:49:12 ] >>948 PeekMessageでぐぐればいろいろ例が見つかるはずだから、そのとおりにやればいい。
956 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 00:55:24 ] 質問です CreateThreadで作ったのが糞スレッドかどうか判断するAPIを教えてください
957 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 00:58:06 ] CreateThread自体が糞だからそのようなAPIは用意されていません。
958 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 08:19:20 ] PCを起動したときに、それまで何日間起動されなかったか知りたいのですが、 前回シャットダウンした日時を取得する方法ってありますか?
959 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 09:05:59 ] イベントログ
960 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 10:58:25 ] >>958 >>959 のとおり、イベントログに情報がある。 ただ、OS起動やシャットダウンイベントはデフォルト設定だと記録されないはずなので、 設定を変えるか、もっと簡単にやりたいなら正確ではないけどイベントログサービスの 起動/停止時間をOS起動/シャットダウン時間とみなしてしまうやり方もある。 例がWin32APIでなくて申し訳ないけど、以下WMIのインタフェース使うスクリプトの例。 var query = "Select * from Win32_NTLogEvent where " + "LogFile = 'System' and SourceName = 'EventLog'"; var systemlogs = GetObject("winmgmts:!\\\\.\\root\\cimv2").ExecQuery(query); var e = new Enumerator(systemlogs); for (; ! e.atEnd(); e.moveNext()) { var log = e.item(); if (log.EventCode == 6005) {//イベントログサービス起動 WScript.Echo("起動: "+log.TimeGenerated); } else if (log.EventCode == 6006) {//イベントログサービス停止 WScript.Echo("停止: "+log.TimeGenerated); } }
961 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 11:00:37 ] 親切な人だなぁ・・ 質問者じゃないけど、感心した
962 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 14:26:31 ] 質問者はトリップ付けた方がいいと思うお
963 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 15:22:53 ] そんな面倒な事わざわざしないお
964 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 18:23:10 ] IDがあればそんな面倒な事しなくもいいのにね
965 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:07:44 ] コンボボックスをオーナードローすると 初期表示状態が微妙に縦幅が太くなるんだけぢ どうやって元に戻すんdねすか? 中身の太さ(高さ)は↓で細くできたんです void CColorComboBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct) { lpMeasureItemStruct->itemHeight = 14; }
966 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:07:58 ] またID厨か
967 名前:965 mailto:sage [2008/06/08(日) 19:15:42 ] もひとつ問題が オーナードローを可変にすると(CBS_OWNERDRAWVARIABLE) ボックス内でマウスホイール動かしたときに意味不明な動きをします。 ホイールを下に回してるのに上からビローンって一回転して正しい 位置に回ってきます。なんだこれ。
968 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:46:30 ] >>966 独り言消えろ
969 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:48:08 ] またまたID厨か
970 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:53:08 ] ID厨ウゼェ
971 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:57:41 ] ↑キモッ
972 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:58:33 ] ID厨の特徴 1. 「IDがあればなぁ」などと書く 2. 自演で荒らす 3. 「やっぱID欲しいな」などと書く
973 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 20:08:59 ] やっぱID欲しいな
974 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 20:09:32 ] IDがあればなぁ
975 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 20:29:07 ] 俺の予想では荒らしてるのは一人か二人
976 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 20:29:14 ] かまってほしいな