Win32API質問箱 Build11 [転載禁止]©2ch.net
1 :
デフォルトの名無しさん :
2014/12/10(水) 12:12:49.40 ID:Ii7h0n5Y
あれ9が入ってねぇ
まあ乙
>1 乙 Win32API質問箱 Build119 わざとやってるだろω
>>1 乙です。
それにしてもID出てからというもの良スレに成り下がりましたね
そういう召喚するようなことを書くんじゃないの
基地概が仮面被ってウロウロしてるように見える
仮面弁士さんが仮面さんと略されるのは嫌だとかブログに書いてたときは えー、と思った
警告メッセージボックスを出すタイミングが間違ってると思う
IMEの変換候補リストの非表示化ってWM_IME_SETCONTEXTメッセージ通知時に DefWindowProc ( hWnd, Msg, wParam, lParam & ~ISC_SHOWUIALL )をすることで出来るけど、 これをやっててもWM_IME_COMPOSITIONでDefWindowProcを呼ばずにreturn 0;しちゃうと デスクトップ右下に変換候補リストが表示されちゃうんだけど、どうしたら良いんだろうか return 0;するのは入力中の文字をIME側で表示させないためなんで、これは外せない ちなみにWin8.1の場合で、Win7だと問題ない
>>10 MSDNフォーラムでも上がってる問題かつ前スレから見ててその答えに至る理由と答えを詳しく
13 :
デフォルトの名無しさん :2014/12/11(木) 11:07:13.47 ID:u3d/vbqo
☆☆☆☆☆
/ / / | \ ヽ
/ / / / / || | i ヽ i
i / / / / / / || || |│ |ノス
|// / /___, -一ァ| /! |ト、|│ | | く」
|,-‐¬  ̄---┘'7 |! ハ! |,、-┼十|! | | |
, -‐ ''" し' '´_ /,ィ二l |ト、/!ヽト、\_ヽ!|!l | ハ |
,r/ __ ,イ|リ ヾハ! ヽ! ,ィ⌒ヾミリノ!/リ | ☆ 自民党、グッジョブですわ。 ☆
/ ||ヽ -' / ̄ )` __ |ヒノ:} '` ,イ/ | |
http://www.soumu.go.jp/senkyo/kokumin_touhyou/index.html ,r ' ヾ、 ,-、____ , イ ̄,r==- ==-' レ' /| |
/ ヽ `ーソ ' | |ト、,ヘ ′"" "" / / || | ☆ 日本国民の皆様、12月14日(日)の
. / \_ / | ハ ヽ`゙'ヘ ' '__. ィ / / | | | 『衆議院議員総選挙』に必ず投票にいきましょう。 ☆
/ / / | ヽ 川\ ヾ三ニ‐'′//! | | | |
/ / / 八 \川| |`ト- .. __ , イ‐ァヘ | | || |!
/ / / / \ \ 「`ー- 、 / .〉 ト、| ヽ、
,イ /-─=¬ニヘ、_ \ 厂\ 厂ヽ /!| | `ー=ヘ
-‐  ̄ /─ '  ̄ ├- ヽ\ \ノ\ \ 人 ハ!ヽ || |-┤ ヽ
/ /!‐-- | |\ ト、_`ヽ oヽ ト、! || |‐┤- ヽ
// 〉 __ / ├‐- || | 川-‐ | | 厂7! ハ! ├:┤  ̄ヽ
/ / ー ─  ̄ ├‐- リ || ハ!ヘ | | ト┤|/′ ヾ,┤ ゙i_
‐ ' 〉‐- | / /\ .|o | /ヽ/(′ ∨ \
‐--─ ──-r、___-、 /ー_ {( '´>、! /ヽ/ |\ \
>>11 DirectX SDKのCustomUIサンプルがもしかすると参考になるかも。
あれは変換候補リストを自前描画しているように見えたし。
>>14 レスさんくす。CustomUIは見てる
あのサンプル、WM_IME_から始まるメッセージを処理してる部分すべてに対して「DefWindowProcに任せて他に何もしない」ように書き換えても自前で描画しやがるんだよね
だからIMEのメッセージを処理する以外の方法でやってるんだろうけど、そうなると調べるきっかけが無くて困ってるんだわ…
16 :
デフォルトの名無しさん :2014/12/11(木) 15:49:31.91 ID:qKHRQsDr
>>15 WM_IME_SETCONTEXTは元の通りの処理で、
WM_IME_STARTCOMPOSITIONはreturn 0した上で、
WM_IME_COMPOSITIONはそのまま流すと、
候補リストが出なくなった。
期待した動きにはなっているみたいだけど、
WM_IME_COMPOSITIONの取り扱い方が謎すぎる。
下手したらWin8.1のみOKでしたとかありそうw
>>17 おお、いけた!
Win7でもとりあえず期待通りに動いてる
STARTCOMPOSITIONだけ潰すという発想ができなかった
完全な思い込みだったわ
ありがと、助かった
>>18 もありがと
IMEは本当にめんどくさい GoogleIMEは候補リスト非表示にしたらIMN_OPENCANDIDATEとIMN_CLOSECANDIDATE送らなくなったりするし 予測変換リスト消せないし
21 :
デフォルトの名無しさん :2014/12/13(土) 06:14:59.62 ID:KcZztYF+
OPENCANDIDATEは無くても問題ないけど、CLOSECANDIDATEが無かったら 候補リストが閉じられたことをどうやって判断すれば良いんだろう キー入力や変換状況から推測するしかないのか?
23 :
デフォルトの名無しさん :2014/12/15(月) 22:06:20.53 ID:ZdlYoZ19
ネット上のファイルをDLする URLDownloadToFile についてです これの戻り値は、正常を含めて3つあるとする説明がされているようですが 昨日からYoutubeのページを読もうとすると、800C000D が返ってきます これは INET_E_UNKNOWN_PROTOCOL だそうで 検索しても日本語のサイトは出て来ないので最近追加されたのか MSのサイトでは The protocol is not known and no pluggable protocols have been entered that match. となっていて、なにかプラグイン的なものが必要なのでしょうか それとも、もうURLDownloadToFileは使えないのでしょうか (XP+IE8では正常に表示しています)
25 :
デフォルトの名無しさん :2014/12/15(月) 22:55:54.12 ID:ZdlYoZ19
なんかXPの更新が止まってるせいじゃないかという気がしてきました URLDownloadToFileのせいじゃなくて、それを含むDLLのアップデートが必要ってことなんでしょうね
26 :
デフォルトの名無しさん :2014/12/16(火) 00:13:30.39 ID:OxbDdIsh
とんでもないことです
>>23 は無かったことにして下さい
URLが間違ってただけでした
27 :
デフォルトの名無しさん :2014/12/16(火) 18:58:26.88 ID:PuXxa6T9
エラーメッセージが用をなしてない好例
いやわかるだろ プロトコルが間違ってるつってんだから
やっぱGUIプログラミング極めるにはC#覚えた方が良いの?
そりゃ覚えられるなら覚えたほうがいいだろう
C#を覚えておくと就職で役に立つ可能性がある 趣味でやるならC++のほうが応用利く C#はやりたいことが出来ないことがちょいちょいある
32 :
デフォルトの名無しさん :2014/12/16(火) 21:07:33.11 ID:O3FTYGHy
>>31 趣味だしC++でやるかな。いろいろ変態なことしたいし
そこでCLI?
就職でC#って土方一直線やん C++で組み込みのほうが稼げるよ
C++でguiソフト作る時はみんなWin32APIでゴリゴリ書いてるのか
WTL使ってる
なにそのマゾプレイ 最低でもWTL位は使うと思うぞ。
>>28 最初のコロンの前がプロトコルを指定するということを知らない人は多い
まあ、そういう人がこの板にいるのはどうかと思うが...
あーそういうの使ってるのか。ようやく謎が解けたわ。もうプロシージャとバトルすんの疲れたわ
>>31 > C#はやりたいことが出来ないことがちょいちょいある
インラインアセンブラとか、ライブラリー含めたオブジェクトサイズ命とか?
他に何かあるかなぁ?
C#やっててやりたいこと調べてたら「Win32API使ってください」って書いてあるとゲンナリする
じゃあ最初からC++でやるわ
>>35 CreateWindow書きまくってるわ!
Win32API自体は何も面倒ではない。 WM_COMMAND WM_NOTIFY とか、もうちょっとWindows自体のメッセージの仕組みがどうにかならんかな。
43 :
デフォルトの名無しさん :2014/12/17(水) 14:46:21.16 ID:ejUwy2/1
そこは増築したから可笑しくなってるんで 治そうと思ったら基礎から創りなおさないといけないので無理
笑えない
>>41 あほか
C#から呼ぶWin32APIやCOMメソッドの味こそ至高
質問ッス CallWindowProc()がなぜ必要かについて教えてください もとのウィンドウプロシージャを、シンボルなり関数ポインタなりで直接呼出しちゃいかんの? ネットに転がってるサンプルとかだと、サブクラス化でウィンドウプロシージャをFoo()に変えるときは Foo()からCallWindowProc()経由で元のウィンドウプロシージャを呼び出し、 ウィンドウ生成時にウィンドウプロシージャFoo()を指定したときは Foo()からDefWindowProc()直接呼出し、みたいな傾向で使い分けられてるようなんだけど 意味わかんね;
47 :
デフォルトの名無しさん :2014/12/20(土) 12:15:43.77 ID:e+FqSQyU
リエントラントになってないんじゃね
ウィンドウプロシージャの呼び出しはメッセージキューで同期化されているのでは…
>>46 サブクラス化が解除された時にチェインが切れてしまうから。
1がサブクラス化、2がサブクラス化、1がサブクラス化解除してさようならって順番になった時、
OSが管理していれば2から解除後のプロシージャに繋げることができる。
ふと思い出したけど、WinXPから追加されたShell系のAPI使った方がスマートかも。 Get/Set/RemoveSubclassとDefSubclassProcってのがある。
51 :
デフォルトの名無しさん :2014/12/20(土) 19:49:13.64 ID:yFHMiTkQ
47,48,49 ハズレ。 精進してください
Win32APIで二度と精進することは無いよ、流石に。 このまま解答は謎のまま終わるのだろうしw
>>46 内部でどうやってるのかは知らんけど
WIn32APIってある関数を関数ポインタから直接呼び出さないようにするためのAPIって他にもあった気がする。
元のウィンドウプロシージャがウィンドウプロシージャとは思えないような名前になっている場合でも
CallWindowProc()によって呼ばれていればウィンドウプロシージャとすぐ分かるとか(→まず命名規則を直せwと言われる)
あとコードの中で関数ポインタを使ってそのまま呼び出すと、それが普通の関数との区別が付きにくいから、
普通の関数ではなく関数ポインタを使って呼び出してますよ〜っていうアピールとか
ただ、稀にそういう無駄に思えるAPIにはなんらかの安全装置が入っている場合もあると思う
NULLの場合は呼ばないとかね
まぁ適当に書いたw
Win32APIでウィンドウ内部に表示したテキストをマウスカーソルで選択して その内容をクリップボードにコピーするにはどうすればいいですか? テキストをビットマップで描画した場合はそういう動作を実装するのは原始的な方法でやるしかないと思います。 例えば、独自のデータクラスでテキストのフォント情報とウィンドウ内での表示位置を保持しておいて マウスカーソルが該当位置に入ったときに、マウスポインタをテキストカーソルに変更してテキストを選択、コピーできるようにするといった方法です。 テキストをスタティックテキストとして表示した場合は選択してコピーという動作は不可能ですか? 質問を率直に表現すると、一般的なウェブブラウザやメーラーでの実装がどうなってるのか知りたいです。
Win16でチェインを作るのに用意したAPIが流用できたって事なのかな。 まあ、SDK Books Onlineに全てが書かれているわけでも無し、 Win16の時点で既に別の用途を持っていた可能性もあるか。
57 :
デフォルトの名無しさん :2014/12/21(日) 22:13:14.89 ID:OyijOBJq
スタティックコントロールは、標準では上下中央寄せができないんだよな?
>>54 ここに簡潔に書くことはできない
非常に手の込んだことやる
手探りならHTML->RitchTextコンバータ作ってRitchTextCtrlでごまかせ
62 :
デフォルトの名無しさん :2014/12/24(水) 01:08:44.57 ID:Y7j7WALA
mouse_eventでマウス選択をエミュレート keybd_eventでctrl+cなどのクリップボードコピーのショートカットキーを合成
VBSでWindowsのアクティブウィンドウの"XXX.exe"やPIDを取得する方法ありますか? WMIのWin32_Processテーブルで実行中アプリ一覧は取得できたんですけど、 アクティブなのかとかウィンドウの順序がわかりませんでした。 VBSを実行するとVBSがアクティブになるようなので、直前にアクティブだったモノを取得したいです。
>>54 スタティックコントロールならGetWindowsTextで出来るし
TextOutや画像の場合はOCRで判別しないとだめな事は分かるが
ブラウザやメーラーのどんな機能を求めてるのかがいまいちわからない
オープンソースで沢山あるから求めるものを探してみては?
>>63 いろいろやり方あるけど
CUIオンリーで作るか
GUIでやるならGUI生成前にアクティブなウィンドウを保持すればいい
非MFCな簡単なDialog(STATICテキストとボタンのみ)を作ったのですが、 STATICテキストに文字列を改行を含めて複数行書きこんだら、Dialogの 高さが足りなくて、下のほうが表示出来ないのですが、STATICテキスト 全体が丁度うまく入るようにDialogの高さを自動的に調整するには、 どういう手法がありますか?使うフォントやサイズから必要な高さを 計算するしかないでしょうか?
リソースで用意したダイアログボックスをDialogBoxで呼び出す分には行数だけ意識してりゃ良いと思うんだけど、 CreateWindowでダイアログボックスっぽいウインドウを自作してるのか、それともフォントを動的に変更したいのか? フォントが固定なら、あらかじめサイズ測ってそれが収まるサイズで作れば良いんじゃね
>>66 レスありがとうございました。
リソースで用意したダイアログボックスをDialogBoxで呼び出しています。
CreateWindowは使っていません。
フォントが固定です。
この場合には、この使っているフォントの高さを予め測っておいて、それに
行数を掛ければよいのでしょうか?
>>66 良く考えたら、横方向も、一番長い行に合わせてウインドウ幅を
広げないといけないように思うのですが、それも自前で実装する
必要ありますか?
>>67 リソースは何で作ってんの
リソースエディタなら最初から必要な分だけ高さ持っとくではダメなん?
>>69 ああ、書き忘れていました。フォントは固定ですけれど、
表示する文字列は、状況に応じて変えたいのです。
MessageBoxをやりたいのでは?
CreateSymbolicLinkで作られたリンクの リンク先パスってどうやって取ればいい?
>>71 MessageBoxって、表示する文字列に応じて、縦横サイズは
自動で調整されたっけ?
確か、横幅は勝手な値になったような気がする。
>>72 「Junctions と Symbolic Links を見分ける」って記事で、参考になりそうな情報が載ってた
>>73 ある程度は可変だけど、横の長さは限界があったような
GetTextExtent32 DrawText 使えば、洗濯中のフォントでテキストの大きさが計算できる
>>74 ,
>>76 DeviceIoControlのFSCTL_GET_REPARSE_POINTで取れそうだね
ありがとう
78 :
片山博文MZ ◆T6xkBnTXz7B0 :2014/12/25(木) 15:02:58.41 ID:gEw73of1
choosefontでarialフォントが出てこない。何でやねん!
自己解決。フォントの非表示になってた。
80 :
サトラレ3 :2014/12/25(木) 17:34:46.20 ID:EHIgPikd
移植性皆無のゴミか
>>80 visual studioが自動的に_s関数に置き換えてくれると
嬉しいんだけどなあ。
パラメーターあるのに
>>83 それを考慮して自動的に変換するくらい
やれば出来るだろ。
>>84 templateでできそうだな。GitHubにアップップしてくれよ。
86 :
デフォルトの名無しさん :2014/12/25(木) 19:53:16.23 ID:TNXAHmr6
プルリクエストで他人をタダでコキ使う
Windowsのバッファオーバーフロー芸(脆弱性)の頻度を見るに 効果があるのか疑わしい
VC expressってめっちゃリンクエラー出るな。professionalなら出ないみたいな記事多いけど本当なのだろうか
いつの時代のExpressだよ
PlgBltでマスク付きで回転させると、180度の時だけマスクだけ回転されません 原因と対策が知りたいです
バッファーオーバーランだろうがww
突然どうしたの?発作?
もうスタックをcall/ret 用とデータ用にわけようよ‥
95 :
デフォルトの名無しさん :2014/12/28(日) 18:52:59.69 ID:vTsBbpaJ
ハーバードか
>>95 違う、ハーバードアーキテクチャは命令とデータが別になってる
戻り番地は命令じゃない
win32じゃないけどここが一番詳しそうだから知ってたら教えてくれ HDDのドライブにautorun.infを撒くウィルスに掛かった。 消しても消しても直ぐ新しく作成される。中身はこんな感じ > [AutoRun] > ;QtgJy DWVOd > oPEn = qlthe.pif > > ; > sHell\ExplOre\command= qlthe.pif > ; > sHeLL\oPEN\DEFaUlt=1 > ;UNOVNAKwaqR > sheLL\Open\coMMANd =qlthe.pif > sHell\AuTOplAy\cOMmaNd =qlthe.pif レジストリでAutoRunはdisableにしたけど、根本解決出来ていない。 よくわからないまま初めて使ったプロセスモニターで見てると、 消す時と作られる時、svchostからDLLhost.exeが呼ばれてるみたいなのは分かったけど、 レジストリ検索しても、それらしいトリガーが見つからなかった。 イベントドリブンで動いてるのは分かるんだけど、どこに仕掛けられてるか分からない。 教えて欲しいのは、仕掛けられてる可能性としてはどの辺なんだろうか?というのと ファイル作成イベントを拾ってトレースする方法です。 説明を書きこむのもメンドーだと思うけど、知ってる人が居たらお願いします。
99 :
デフォルトの名無しさん :2014/12/29(月) 14:31:14.30 ID:/fu+2Q3X
環境によって違うかも試練が こっちじゃないの HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
>>98 ファイル作成イベントを監視するより、作成先のパスにアクセスしてる奴を探したほうが良いのでは?
>>99 それ、起動時に実行されるパスを記述するとこだろ
それは罠だ気をつけろw その仕組みを無効にしたら時限爆弾のスイッチが入るかもしれんぞww おとなしくまっさらにしてOSを入れ直しとけ
102 :
デフォルトの名無しさん :2014/12/29(月) 14:45:29.22 ID:/fu+2Q3X
>>100 起動時にウィルスが実行されるんじゃないの
みんな有難う。入れ直すかぁ・・・
104 :
デフォルトの名無しさん :2014/12/29(月) 15:49:07.15 ID:OoIX/QSt
何故このスレでその質問を・・・?
105 :
デフォルトの名無しさん :2014/12/29(月) 17:28:39.53 ID:D8f+V+OM
詳しい奴も常にここ見てるとは限らんしなあ
>>103 タスクスケジューラとスタートアップは見たのかな?
msconfigで確認
svchostの実行ユーザーがSYSTEM/Administratorなら変なサービス登録されてるだろうし 一般ユーザーならどこかに実態があるな
110 :
デフォルトの名無しさん :2014/12/30(火) 00:31:13.33 ID:xDBp8ctI
自動起動は ・レジストリのAutoRunとAutoRunOnce(HKCUとHKLMの両方に存在) ・スタートメニューのスタートアップ ・コントロールパネルの管理メニューのサービス ・アクセサリのシステムツールのタスクスケジューラ がある 特にタスクスケジューラに登録されたプログラムは起動タイミングが多様に設定できる
>>110 >AutoRunとAutoRunOnce
RunとRunOnceではなくて?
あと、スタートメニューのスタートアップとmsconfig(Win8の場合はタスクマネージャ)で設定出来るスタートアップは別だよね
112 :
デフォルトの名無しさん :2014/12/30(火) 00:47:11.64 ID:xDBp8ctI
>>111 そうRunとRunOnce
前のレスのほうでのAutoの文字につられてしまった
msconfigで見れるスタートアップはレジストリのRunとスタートメニューのスタートアップの列挙じゃね
なんのスレだよ
114 :
デフォルトの名無しさん :2014/12/30(火) 01:57:12.63 ID:JWtJz6A1
どさくさに紛れてウィルスの作り方をこっそり教えるスレ
クラス内の2つの関数がテキストファイルにログを出力するようになってて プロジェクトによって出力内容が少し変わるような場合ってどうしてる? そのクラスは機能毎に分けられてる小さなクラスで 将来プロジェクトAとBに使用された場合ログ出力部分だけが プロジェクトAとBで違う動作になる感じ
C++スレと間違えたからそっち行くごめん
BOOL WINAPI FileTimeToSystemTime( _In_ const FILETIME *lpFileTime, _Out_ LPSYSTEMTIME lpSystemTime ); で入力のFILETIME構造体の中身が0の場合、 1601/01/01 00:00:00 が帰って来るようなのですが、これはそういう仕様でしょうか?
仕様です。
120 :
デフォルトの名無しさん :2015/01/02(金) 13:13:58.61 ID:9DuwxUct
その日時から100ns単位での経過時間を64bitで表したものが FILETIME構造体だから、そりゃそうだろって感じではある。
徳川幕府が開かれた記念に開始年を合わせているのです
>>119 仕様ですか。マイクロソフトのサイト見ても仕様だとは書いていないのですが。
どこかに情報ありますか?
一方、大きな値を与えた場合には
FILETIME の値が 0x8000000000000000 以上の値である場合、この関数は失敗します。
という説明はありますが、確かにこれ以上の値を与えるとエラーしました。
でも、戻り値のSYSTEMTIME構造体の中には、非常に大きな年月日が入っていて、いつも
同じ値なのですが、これも仕様でしょうか?エラーの場合に戻り値が異なる可能性ありますか?
失敗した場合にlpSystemTimeに何が返るかなんて保証されんだろう。
>>122 >仕様ですか。マイクロソフトのサイト見ても仕様だとは書いていないのですが。
MSのサイトの何処かには書いてるんだが、それがMSDNマガジンの中にしか無いってこともあるし。
まとめて書いてくれてたりハイパーリンクがあったりはしなくて情報は分散してる。
ところで、なんで経過時間になってるの? サイズを最小に収めようとしたから?
どうも私の質問の意図が伝わっていないようなのですが、何故1601年から数えるのかを聞いているのではありません。 私の質問は、systemtimeの 1601/01/01 00:00:00をfiletimeに変換すると二つの32bit正整数が得られると思いますが、それはゼロではありません。 それにもかかわらずにfiletimeのゼロを systemtimeに変換すると何故1601/01/01 00:00:00 になるのかが疑問なんですが?仕様ですか?
>>127 time_t の発案者に聞いてみないと分かんね
130 :
デフォルトの名無しさん :2015/01/02(金) 15:45:28.67 ID:C0yW4Jjr
>>128 ん? 何時の間にか変換が逆になってない?
133 :
デフォルトの名無しさん :2015/01/02(金) 15:53:42.93 ID:C0yW4Jjr
SYSTEMTIME構造体は最小単位がミリ秒 FILETIME構造体は最小単位が100ナノ秒 SYSTEMTIME構造体からFILETIME構造体に変換した際に100ナノ秒の位の値を弄らないだけじゃね
>>132 >この記事は翻訳者によって翻訳されたものです。
誰かが機械翻訳に手を入れて間違えたのをMSがまんま承認したんだろな
>>128 SystemTimeToFileTime のソースコード見れば解決するw
書くたびに言うこと違うから、そりゃ意図が伝わらんわな。
>>128 > 私の質問は、systemtimeの
> 1601/01/01 00:00:00をfiletimeに変換すると二つの32bit正整数が得られると思いますが、それはゼロではありません。
再現しない(普通に 0, 0 になる)
コード晒してみなよ
Windowsプログラミング学ぶ上で参考にした書籍ある?
AdvancedWindowsくらいかな
::Sleepについておしえて 1秒寝る場合 std::this_thread::sleep_for(std::chrono::milliseconds(1000)); と ::Sleep(1000); では相対的な意味でどちらのほうが高精度なんですか?
前者は最終的に concurrency::wait を呼んでいて精度はmilliseconds なのでどっちも同じ
>>137 わざわざテストして頂いてありがとうございました。
私の勘違いでした。1601/1/1は0,0になりました。失礼しました。
でも、不思議なのは、
FileTimeToSystemTimeは
FILETIME の値が 0x8000000000000000 以上の値である場合、この関数は失敗します。
とあるので、0x7FFFFFFFFFFFFFFFで試したら成功したのですが、これは良いのですが、
それで得られたsystimeの値を、逆にSystemTimeToFileTime
で逆変換したらエラーしました。不思議です。
>>142 有効範囲が違うだけだろ
SYSTEMTIME の wYear の最大値は 30,827 だけど、0x7FFFFFFF, 0xFFFFFFFF の FILETIME を SYSTEMTIME に変換すると wYear は 30,828 になる
有効範囲を合わせるという考え方もあるけど、範囲チェックのやり易さとかを優先したんだろ
>>142 そんな未来の話してたら鬼が笑いすぎて死ぬ
>>143 30,827や30,828という数字が最大値になっているのは、何か意味があるのでしょうか?
32767とか65536みたいな数字なら分るんですが。
すこしは自分の頭を使えば?
>>145 0x7F...F を SYSTEMTIME に変換したら 30,828年の途中の月日になってるから、年を 30,827年までにしたんじゃね?
そうすりゃ、月日をどう指定されても 0x7F...F を越えないから
1ミリも頭を使う気がないんだろうか
>>145 それが世界滅亡の年だから、MSの技術者はそれより先は不要と考えた
Y10K問題のRFCもあるというのに・・・ッ
gdgd過ぎる質問者 クレーマー気質だな
人工無脳のテスト中なんだろ。
registry editorの画面はF5で表示を更新 出来ますが、それをプログラム的に 行えるようなWIN32API有りますか?
>>153 InvalidateRect
TranslateAccelerators
>>153 レジストリー関数、
ツリービューコントロールの更新、
リストビューコントロールの更新
>>153 レジストリ情報を表示する処理をルーチン化して、
アプリ起動時の初期表示とF5が押された時にそれを呼び出す
keybd_eventで。あーでもUAC効いてると送出側もUAC昇格してないといけないか
SendMessageでF5送ればいいやん
SendMessageでコマンドID648を送るのがいいでないかな。 UAC昇格が必要っぽいけど。
161 :
デフォルトの名無しさん :2015/01/04(日) 05:27:09.82 ID:45GcCJJQ
SendInputも?
いろいろ試したのですがどうやってもRegistry Editorの画面が更新 出来ません。どうすれば出来ますか?
グダグダ言わず、黙って動くソースコード寄越せという事ですか。
本当はWEBブラウザにでも使用してカウンター上げたいのかね
キーボードに爪楊枝でもはさんでおけばいいよね。
むかし家庭用ゲームでも連射パッドってあったよな ストUでしゃがみ小キックを連打とか F5キー連打キーボードっての作ればバカ売れじゃね? 韓国あたりで
>>162 操作アプリ側のmanifest設定でUAC昇格しろ
うるせ、カス
教えてくんBOTのお相手ご苦労
171 :
片山博文MZ ◆T6xkBnTXz7B0 :2015/01/06(火) 14:28:33.60 ID:hDnOTpqT
スクリプト言語でWin32 APIを直接たたくのが難しいという話が あったので、Win32 APIのデータベースを作ることにした。 興味があったら開発に参加して下さい。
OLEのドラッグアンドドロップやってるんだけど、 ドラッグしてるファイルを他のファイルにドロップする方法が分かりません フォルダへのドロップにらSHFileOperationで、実行ファイルへのドロップならCreateProcessで何とかなりますが、 ZIPファイルへのドロップとか、エクスプローラーなら圧縮ファイル内に追加したりできるのでそれを再現したいんです 後、IDropTargetのDragOverのタイミングでそれがドロップ出来るファイルなのか判別する方法も出来れば
あれはシェルというよりエクスプローラーの機能だからなぁ 適当なライブラリ使って実装したほうがいい
>>175 いや、それがxfinderとか一部のファイラーでは出来るものがあるんですよ、
ソースの公開されてるexplorer++では残念ながら出来ないので参考にならず…
ソースの公開されてるファイラーを検索してみましたが、xfinderと同じ作者さんのtablacusexplorerがソース公開されてて再現できるようですね これでどうにか解決できそうです
だからさ、適当なライブラリで自前でやってるんだろうよ。
だからもくそもない
だからもくそもあるんだよ
いえいらないです
>>173 ファイルからIDataObject作って(SHCreateDataObject api等)
それをターゲットのIDropTargetにDragEnter&Dropする
DragOverで正しい引数を渡してやればeffectにドロップできるかどうかが入ってるでしょ
>>182 (=゚ω゚)ノ 大体分かりました。どもです。
SHCreateDataObjectのMSDNのコメントに、得られるDataObjectにはCF_HDROPなデータがないと書いてある まあ自分でSetDataすればいいな
>>182 さんのいうようにドロップ先のファイルのIDropTargetを作って、
DragEnter/DragOver/Dropでドラッグされてるファイルや状態のデータが送られてくるので、
それを作ったドロップ先のドロップターゲットで処理させることで目的のeffectを受け取ったりドロップすることが出来ました
DragOverだけは効率を理由?にIDataObjectが受け取れないのでDragEnterのタイミングでとっておいたポインタを利用
マウスの入力はDropのタイミングでは当然ボタンが離されているので何も押されていない状態を受け取ってしまう
こちらはDragEnterのタイミングで左右どちらのドラッグか取得しておき、最後に入力状態に結合すればイイだけですね
これで問題なさそうです
本当に助かりました、感謝します
186 :
デフォルトの名無しさん :2015/01/09(金) 09:22:24.41 ID:+YxGEmiz
32bitの実行ファイルから64bitの実行ファイルをウィンドウを表示させずに起動して、終了待ちにしたいのですが 調べたところこのような感じのことがネットに出ていたのですが、間違いないでしょうか ・systemではウィンドウを非表示にできない。 ・ShellExecuteでは終了待ちができない。 ・CreateProcessでは32bitから64bitを呼び出せない。 395 名前: デフォルトの名無しさん [sage] 投稿日: 2015/01/
まず、64bitモード用プログラムは64bitモードでしか実行できないし、32bitモード用プログラムは32bitモードでしか起動できません。 従って起動するコマンドの実行ファイルが64bitモードで作られていれば自動的に64bitモードで実行されると思いますけど。 32bit用と64bit用で同名のコマンドがある場合でも64bitの実行ファイルをフルパス指定すれば良いだけだと思います。
コピペの応酬?
FAQ
ShellExecuteExの終了待ちは失敗することがあると出ていたのですが まれなのでしょうか
>>192 どこでだよ? そもそも「ShellExecuteExの終了待ち」なんて処理は存在しない。
あるのは「プロセスの終了待ち」だ。 それに失敗することがあるのなら、その詳細を洗えば良いだけだ。
ShellExecuteExにチャレンジしてみます。 ありがとうございます
196 :
デフォルトの名無しさん :2015/01/09(金) 17:09:44.37 ID:JoT/J+XX
年始
Win7で非MFCで簡単なdialogを作ったのですが リソースではdialogのフォントをMeiryo 9 にしていて、Win7ではいい感じに 表示されるのですが、XPで実行するとアホみたいに大きなフォントで表示されて しまいます。これをXPでもWin7を同じがそれに近い見栄えにする方法 教えて下さい。
198 :
デフォルトの名無しさん :2015/01/14(水) 13:01:42.75 ID:EnBoJmyV
いやよ いやいや
199 :
デフォルトの名無しさん :2015/01/14(水) 13:41:37.70 ID:H5VD+o7q
XPにMeiryo入れたらええがな。 それがダメなら7でMSゴシで作れや。
馬鹿には大きく見えるフォントですって書いとけ
もういいかげんXPやめろや
203 :
デフォルトの名無しさん :2015/01/14(水) 14:23:45.85 ID:H5VD+o7q
>>200 XPは他人のPCなのでMeiryoを入れられないのよ。
XPでMeiryo 9に近いフォントを教えなさいよ。
フォント入れられないなら無いから諦めろ
愛と希望と勇気の日
OSの種類調べてWM_SETFONTで変えればイイ
Tahoma 8ptでええやん
Tahoma 8ptは本当にお世話になりました
210 :
デフォルトの名無しさん :2015/01/14(水) 17:03:00.45 ID:H5VD+o7q
Meiryo 9とTahoma 8で割といい感じに出来たわよ。 208には感謝するわ。 でも複数行の文字列だと、Tahoma 8のほうが改行幅が 少ないのよね。行が詰まった感じ。どうしたら改行幅を 増やせるのか教えなさいよ。
きめえんだよ殺すぞ
はい
.Netのフォームとか唯のWin32APIのラッパーって感じであんま興味なかったんだけど、 WPFはいい感じなんだよな。いろんなパーツが入れ子に出来るし、 ハードウェアアクセラレーションも効くし、ベクタグラフィックもあるし。 ついにWin32APIを置き換える本命が来たって感じ。移行しようかなぁ。 あれを体験すると、オーナードローとかマジ糞ってかんじ。
WPFはオワコンなんじゃない
WPFってすでに9歳なんですけど 9年経っても全く普及しない時点で 何かおかしいと感じるくらいのアンテナ感度が欲しいところです
見えます、見えますぞ 昔同じようななことがありましたぞ 何でもかんでも継承できるC++って素敵→スパゲッティクラスのできあがり
せっかく最新のVSを入れたので、最新のMFCはどんなものかと ウィザードつかってビルドしてみてビックリした。 すげーオシャレッティーなVS風のドッキングウィンドウに対応しているのな。 動作は丸々VSそのもの。ドッキングするし、ツールバーはフローティングするし、 これはこれで凄いんだけど、吐き出されたソースコードがかなりカオスってて、 これを理解するのは骨が折れるので今更MFCは無いなと。 ツールバーにコンボボックスを表示するにはどうしたらいいのかなーとか思って CMFCToolBarのソースコード見たけど、どうも昔ながらのビットマップとボタンベースな感じの メソッドがずらりと並んでいたので、どうせハックじみたことをしないといけないのなら もうWin32APIでいいやって感じ。まーMFCは無いわ。
独り言でも流行ってんの?
MFCですら使えない可哀想な人なんだから そうっとしておこうよ。
どこぞの挙手厨みたいだ
>>218 そんなGUIが必要になるケースはまれだから必要なときは手描きでOK
でもツールバーにいろんなパーツを載せたりとか、 リストボックスのアイテムに複合的なコントロールを載せたりとか、 夢が広がリングじゃね?Win32APIでそういうことをするのはマジで鬼畜だからねー。 何でもかんでも入れ子に出来るWPFはそれなりに魅力あると思う。 そんでちょっとMFCについてもいろいろ調べたんだけど、どうもバグの宝庫みたいだな。 Win32APIは枯れているのか、バグ自体はそんな無い感じだし、MFC使う意味はマジ無いな。 バッドノウハウが山のように引っかかる。 というか、MS自体ももうMFCを自社ソフト使ってないだろうから、 バギーでもうちは関係ねーって感じなんだろうけど。 最初ちょっと見た目の華やかさに引かれたけど、 よくよくコードを見ると旧態依然って感じで、MFC使うくらいならWin32APIで十分って思った。
噂になることより悪いことは 噂にすらならないこと それがWPF
長いからさっきのコピペだとばかり。 Wikipediaの記述にでも毒されて、スレタイすら読めなくなったか?
>>225 ツールバーにこだわる必要ある?
普通にウインドウにいろんなコントロール並べりゃ変わんないと思うんだが
リストボックスも、リストボックスやめてリストビューでオーナードローすりゃ何でも出来るでしょ
何ならリストを手描きにしちゃうとか
そもそも利用者はそんな凝ったUI望んでないと思うけどね
最初に教わったのが ListBox は使ってはいけない だからな
Connectで提示されたWPFのロードマップについて 元WPF開発者が「こんなものお為ごかしでロードマップでもなんでもない」とコメントするくらいなので
>>225 >何でもかんでも入れ子に出来るWPFはそれなりに魅力あると思う。
MFCができたころも、そういういうオナニー画面を作る奴が続出したなあ
http://www.resedit.net/ ↑ここからリソースエディタダウンロードして使おうとしたら怪しいインストーラで、
そんなはずないなぁと思いつつインストールしたら、めっちゃたくさん広告インストールされて、
RedEditを必死にスタートメニュから探したけどインストールされてなかったorz
インストールされたやつ全部アンインストールして、chromeの設定初期化して、ウィルスソフトで
フルスキャンかけてるわ
超ムカつくから、どうにか仕返ししたいんだけど、何かいい方法ない?
>>233 OSをきれいさっぱりインストールし直した方が良さそうだがなあ、
君の能力的にw
>>234 今、それやるかどうかかなり迷ってる
OSをクリーンインストールしてまだ1週間くらいしか経ってないんだよ
だから、余計ムカつく
窓の杜にはどうせインストーラしかないんだろうって思って、本家のサイトからポータブル版探してくるようにしてたから、 今回も本家のサイトから落としたんだけど インストーラになってて、「?」って感じだったから、本家のサイト見直してみて、他にダウンロードできるファイルなさそうだし、 窓の杜のファイルサイズみても同じくらいだったから、インストーラしかないと思ってしまった もう絶対インストーラなんか信じねー 必要もないのにインストーラで配布している奴は、サイトが乗っ取られて、 インストーラをすり替えられるとこまで想像できないんだよ
237 :
デフォルトの名無しさん :2015/01/18(日) 04:08:29.95 ID:vlONSagO
まともな開発者なら インストーラーと一緒に md5とかのhash値も置いてるはず
そのmd5とかのhash値も書き換えられてたら分からねーだろ サイト自体を改ざんしてるんだから、インストーラをすり替えられるんだったらhtmlを少し書き換えるのも余裕だろ
>>238 そこまで気にするならvsのdvd買って来いよw
240 :
デフォルトの名無しさん :2015/01/18(日) 04:33:48.74 ID:vlONSagO
>>233 まじでウイルスなの?怖いなぁ…
そんなん疑いなく入れるわ
>>240 hash値だけ別のサーバに置くなんてしてるとこある?
確かにそこまでやればセキュリティは十分だと思う
>>238 Downloadボタンを模した広告に引っかかったのか。
かわいそう(
>>244 あー、すまん。確かにお前さんの言うとおりだわ。
Webサイト改竄してまで広告しこむ輩が本当にいるのかにわかに信じがたいのだが。 だれか落として人柱になってみてよ。
インストーラを起動したら、hao123を入れるチェックボックスがあるなw uniextractで展開してもreseditの実体が見つからんから、たしかに改竄されてるかも知れん。 面倒くさいからそれ以上調べなかったが。
言語ファイルが入っているはずのtranslation.7zも変なxlsxファイルが 入ってるみたいだし、あかんな。
で、窓の杜からreseditダウソしたけど、ポータブル版じゃん。 こっち使えよw
そうなんだよw そっち落とせばよかったのに、めっちゃ悔しいわー
まあ、迷惑ソフトの類が入ってるだけならadwcleaner辺りで削除しとけば。
単に作者がResEdit本体を入れ忘れたって可能性も。 広告が入ったのはチェックボックスクリアするの忘れたID:6QGj4g4iのポカで。 こんなマイナーメジャーなソフト狙ってわざわざWeb改竄してまで 利益の薄い広告ソフト仕込んでくるとはちょっと考えられないしなー。 今となってはMS謹製のリソースエディタがタダになったので、 ResEditもお役御免って感じだし。
これインストールしてみると分かるけど、チェックボックスがあるのは最初のページだけで、そのあとは選択肢がない 5〜7ページくらいAcceptを押すと(この時点で明らかにおかしいんだが) 「バックグラウンドでインストールします」とか言ってインストーラの画面非表示にして インストールしていくんだよね そうするとchromeで普通にブラウジングするのも困難なほどアドウェアがインストールされる
>>253 > 単に作者がResEdit本体を入れ忘れたって可能性も。
ないな。
もうこんなキモイ作者の作ったソフト使うのは止めたほうがよいだろうね。 素直にVSCommunityインストールすれ。リソースエディタ付いてくるから。
>>254 左下に小さくDeclineってあるだろバカか
>>254 それとResEditはインストール先の指定が無くて
ルートにインストールされてると思う
漢は黙って XN Resource Editor
264 :
デフォルトの名無しさん :2015/01/18(日) 08:22:11.66 ID:sNaTaheH
そろそろ Win32API の話しようぜ
>>247 ,254,263
1ページ目のチェックボックスは入れるかどうかではなく
ブラウザ起動した時の初期ページにするかどうかだからな
プログラム板でこうもひっかかりそうな奴ばかりなのは驚きなんだが
というかさあ、VS Community入れたら済む話じゃね?
バカは素直に窓の杜から落とせばいいのに 厨二なのかなんだかわからんけど、かっこつけるから。
269 :
デフォルトの名無しさん :2015/01/18(日) 12:37:28.88 ID:FrxzlsYx
>>243 漏れもそれだと思ってた
馬鹿はこっちの想像以上に馬鹿だと認識を新たにした
>>261 マジか。俺の英語力が未熟だったようだ。これインストールするの難易度高すぎじゃね
これインストールしてもスタートメニューに登録されないし、デスクトップにショートカットが作られるわけでもない
それで、インストール先も選択できなくてルートに展開されるだけ
やっつけ作っただけじゃねーか、作者もう開発する気ないだろ
開発を継続しているならギリギリ許せるが、開発をやめてこういうインストーラに変えてくるって、
アドウェア認定されても文句は言えない
ちゃんとインストールはされるから、ウィルスソフトとかが反応しないし、たち悪すぎだわ
>>266 VSはPro持ってるけど、コンパイル済みのexeのリソースが見たかったんだよ。VSで見れる?
>>267 今回は結果的に窓の杜から落とせば問題なかったが、普通、インストーラーとポータブル版両方配布しているソフトだと、
窓の杜にはインストーラー版しかないから、本家のサイトからポータブル版探すようにしてた
インストーラーだと、OSクリーンインストールしたら消えちゃうから面倒なんだよ
未熟なのは英語力だけなんでしょうか()
>>263 マジだ。Win8.1の実機だと
>>261 のようになるけど、Hyper-V上の2008R2だと
>>263 の画面になるな
>>272 何が何でも叩きたいのかな
今回の件、ちゃんと分かってたのってID:s5LGz3LP1人だけなのに、なんでエラそうにしてんのか分からん
あ、スマン、
>>257 の人が最初に見つけて来てくれだんだね
Declineでスキップしても裏でPC情報送信か。完全にアドウェアじゃねーか
275 :
266 :2015/01/18(日) 14:34:52.35 ID:ENvWPWHO
>>271 大丈夫だ、問題ない。
一番良いのでなくてもいける。
馬鹿には無理ですね 判ります
何がなんでもっていうか、お前は叩きたい確かに
>>275 あ、ほんとだ。普通に編集できるな
ファイル→開く→ファイル で結構何でも開けるんだな
exe開こうと思ったことなかったから知らなかった
VC6のリソースエディタが最強
そんな化石バージョンまだ使ってんの?
283 :
デフォルトの名無しさん :2015/01/18(日) 20:38:31.95 ID:MSgZJjrE
Open Watcom C++のリソースエディタじゃダメなん?知らんけど
284 :
デフォルトの名無しさん :2015/01/18(日) 22:50:49.49 ID:1aKmdwrF
リソースエディタなんていらないだろ 男なら黙ってリソーススクリプト手書きだろ
CreateWindowで書きまくれよ
2ch人減ったな・・・。
287 :
デフォルトの名無しさん :2015/01/19(月) 18:02:39.72 ID:IywTVsIe
WindowsのProcess ID ってDWORD(unsigned long)ですよね。 この場合、 0〜4294967295 までの値が可能だと思うのですが、 何らかのプロセスのIDがこの最大値4294967295を取るなんて言う 可能性はありますか?Win7 64bitの場合、タスクマネージャで見る限りは 0〜1万数千番台のIDばかりなので、IDの上限があるのかなと思いまして。 何か知っている人、教えて下さい。
予約されてる範囲があるんじゃね
>>287 0xFFFFFFFF を「特定の意味」にして利用したいのか?
ProcessIDだけじゃなくその空間でThreadIDも管理されるらしい。
要するにProcessIDで使われていなくてもThreadIDで使われている可能性もある。
OSを起動しっぱなし、アプリケーションの起動、終了を繰り返すのでなければ
そうそう大きな数値が割り当てられることは無いと思う。
ただ、目に見えないスレッドの作成、破棄でもIDが利用されると思うから注意。
重複させない、再利用を控えるための広大な範囲だと思うので「利用されない」というのは保証されないかと。
すべてのプロセスとスレッドがその数まで行くことは滅多にないだろうけど、
そういう使い方は万一のときに見つけにくいバグになると思うから辞めたほうが良いと思うよ。
System Idle ProcessがPID0で固定だからこれを特定の意味として利用するのはどうよ
GetProcessIDを使う場合は注意が必要だけど
仕様で明確に定義されていない上限を仮定してプログラムを組むなんてのは 基礎の段階で「絶対にするな」と釘を刺されるレベルの話だと思うんだけどな
-1には別の意味があるだろ。 ドキュメント嫁や。
AllowSetForegroundWindow の ASFW_ANY とか?
296 :
デフォルトの名無しさん :2015/01/20(火) 08:42:58.91 ID:F6HHv4j5
-1を禁止にしたところで -2を使う香具師は絶対出て来る
馬鹿は死ねばいい
真の馬鹿は他人を巻き込んで死ぬ
全員バカ
てか、底辺職業のマにバカ以外いるのか バカだから室内底辺職業のドカタになったん(なるしかなかった)だからな
マ板じゃなくてム板だから 趣味の人も来るから
タスクトレイのアイコン取得をしたいのですが vista 32bitでは問題ないのですが8 64bitでは・・・ SendMessage(hTrayWnd, TB_BUTTONCOUNT, 0, 0); で数の取得はできるのですが SendMessage(hTrayWnd, TB_GETBUTTONINFO, i, (LPARAM)btnInfo); ができないです Build95に同じような質問があって そこでは解決してたみたいだけど UACの確認や64bitでコンパイルしてもむりぽ アドバイスお願いします
エラーは返ってないのかな
自作のアプリでウインドウを開いて、その中に他のアプリを子ウインドウと して取りこむことは可能でしょうか? 例えば、ウインドウを開いて、その中にnotepad.exeを取りこんでしまうとか、 あるいは、chrome.exeを取りこむとか。
>>302 TB_GETBUTTONINFOのwPrarmはインデックスじゃなくてidのようだが
そこらへんは大丈夫か
>>303 -1が返ってくる、GetLastErrorはなし
>>306 実際にはTB_GETBUTTONでidCommandを取得してからやってるから大丈夫
TB_GETBUTTONも問題ないからTB_GETBUTTONINFOだけどうにかならないかなあ
やりとりするポインタがプロセス間で共有できないから 相手のプロセス空間にメモリを確保するAPIで確保した ポインタを使う
>>308 VirtualAllocExで確保しているので大丈夫かと
子出しイクナイ
中出し 子だし
こうみえても20代なんだろうか
http://stackoverflow.com/questions/25267272/win32-enable-visual-styles-in-dll のAnswerにあるコードをWin7Pro64のVS2013 C++で実行すると正常動作するのですが、
XP向けにv120_xpでビルドしてWinXP32bitで実行すると
hActCtx = CreateActCtx(&actCtx);
if (hActCtx != INVALID_HANDLE_VALUE)
でエラーして、INVALID_HANDLE_VALUE になります。GetLastErrorを見ると、
このコマンドを実行するのに十分は記憶域がありません。0x08
なんです。ディスクもメモリも十分積んでいるのですが。
いろいろググルと英語で同じエラーの
CreateActCtx error 0x00000008 (Not enough disk space available)
みたいなページは幾つかヒットするのですが、肝心のWinXPでエラーする原因が見つけられませんでした。
何かご存知でしたら教えて下さい。
>>315 MSDNのAPIのコメントに、XPだとlpSourceも必要だったって書いてあるから、
それでもう一度試してみては?
>>316 レスありがとうございました。
ご指摘の方法で上手く行きました。
何時間もググったのですが
>MSDNのAPIのコメント
を発見出来なかったのですが、もし可能ならそのアドレス教えて下さい。
モーダルダイアログ上にレポートタイプのリストビューを配置しています。 リストビューヘッダーも表示していますが、このヘッダーのカラムの間にマウスを持って行き ドラッグするとカラムサイズが変更できますよね。 このサイズ変更中、境界線のみ描画されるのですが、カラム全体もリニアにサイズ変更・描画 するにはどうすればいいでしょう? Windowsの設定で、ウィンドウサイズの変更の際に枠のみ描画して処理を軽くするテクニックが 昔からあったと思いますが、動作としては似たような感じに見えます。 しかし、現環境ではそのような設定は行っていません。 (ウィンドウサイズ変更に対してリニアに再描画されている)
ListViewのStyleとMaskは何にしてる?
>>319 styleはリソースからコピペすると、
CONTROL "", IDC_LIST, WC_LISTVIEW, WS_GROUP | WS_TABSTOP | WS_BORDER | LVS_ALIGNLEFT | LVS_SHOWSELALWAYS | LVS_SINGLESEL | LVS_REPORT, 5, 5, 440, 200, WS_EX_LEFT
追加で
LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT
をやっています。
カラム追加時は
LVCFMT_LEFT | LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM
です。
ヘッダーにHDS_FULLDRAG Vista以降はmanifestでCommon-Controls v6の指定も必要
>>321 manifest追加で解決しました。ありがとうございます。
323 :
デフォルトの名無しさん :2015/02/03(火) 07:35:13.18 ID:2zuqa7HE
マウスホイールの関数で下記のものとボタンを結びつけて実行しているのですが ボタンを一回押したら一回だけ関数を実行してほしいのですが、何回も実行しているようなのですが SLEEPなどを入れるしかないでしょうか void setMouseWhl(int whl) { INPUT data; data.type = INPUT_MOUSE; data.mi.mouseData = whl; data.mi.dwFlags = MOUSEEVENTF_WHEEL; data.mi.time = 0; data.mi.dwExtraInfo = 0; ::SendInput(1, &data, sizeof(INPUT)); }
>>323 whl いくつになってるのよ?
> One wheel click is defined as WHEEL_DELTA, which is 120
になってるが 120ptの移動がwhl回発生するのか、(whl % 120) 回のイベントが発生するのかよくわかんない。
ただ、1回のイベントでの移動量は120pt固定だと思うよ。
WM_MOUSEWHEELごとに常に1行スクロールするクソコードが氾濫しているから
大きな移動量でもメッセージをまとめるようなことは避けているんじゃないかな。
https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms645617 (v=vs.85).aspx
>The wheel rotation will be a multiple of WHEEL_DELTA, which is set at 120.
>This is the threshold for action to be taken, and one such action (for example, scrolling one increment) should occur for each delta.
>The delta was set to 120 to allow Microsoft or other vendors to build finer-resolution wheels (a freely-rotating wheel with no notches) to send more messages per rotation, but with a smaller value in each message.
328 :
デフォルトの名無しさん :2015/02/03(火) 08:27:13.11 ID:qs6+LCRH
WHEEL_DELTAの120ptってのもよくわからないのですが、120行一回の実行で飛ばすという意味でしょうか 実機のマウスでホイールを一回カチっとなる時に一回だけ発生してほしいのですが
120は何かしらの基準であって、行数でもピクセル数でもない。 ホイール1回相当のために data.mi.mouseData に指定すべき値は WHEEL_DELTA(=120) か 1 かどっちかだと思うが、試してみて。 あと、念のため setMouseWhl() がボタン1回ごとに1回だけ呼ばれているかも確認して欲しい。
deltaの数だけ呼ぶんでなく deltaが0でないときに1回呼べばいいんだよ deltaの意味分かってるのか
少し実験をしてみます。
そういえば、マウスホイールって1回1回がカチっとなるタイプと 連続的にぬるぬる回るタイプがあるけど、メッセージの発生の仕方が違うのかな? ぬるぬる系でもアプリが対応してなければ、結局はWHEEL_DELTAの粒度でしか反応しないんだろうか。
>>329 何回も実行されているのを確認しました。
それは良かった
ぐぐってるとこういうのが出てくるんですがこれは関係ありますか? zDelta = GET_WHEEL_DELTA_WPARAM(wParam);
とりあえず一回実行したらフラグ立てて二回目を実行しないようにします。
質問です ::CreateWindowEx( 0, REBARCLASSNAME〜 で作ったレバーコントロールの高さが変更されたとき、 親ウィンドウに何のメッセージが通知されますか?
RBN_HEIGHTCHANGE
サンクス
c++でwindowsサービスプログラムを作りたいのですがATLプロジェクトからしか作れませんか? windowsAPIを駆使して作るのに参考になるサイトや書籍はありますか?
駆使とか言うほど大したものじゃないよ。 MSDNライブラリのサービスの所にあるサンプルコードを 参考にするだけで十分じゃないかな。
>>340 VC++Expressのがデフォルトで吐くコードとりあえず眺めてみたらいいと思う
343 :
デフォルトの名無しさん :2015/02/08(日) 08:01:38.27 ID:tUjKNEQ0
>>340 サービスだけならめっちゃ簡単
COMサーバーもサポートするなら面倒鴨試練
面倒なだけであって「出来ない」と言うつもりはない
本当に理解したいなら古くからある本だけどWin32システムサービスプログラミングって本
皆様ありがとうございます。 COMサーバーと言われてもよくわかってないレベルなので本を買うことにします。
346 :
デフォルトの名無しさん :2015/02/09(月) 03:34:33.98 ID:RHlYdffT
Windows10にすればずっと使えそうだな
http://internet.watch.impress.co.jp/docs/news/20150122_684843.html Windows10は「サービス」になる
Windows 10は、Windows 8.1/7およびWindows Phone 8.1のユーザーに対し、
リリース後1年間は無料アップグレードとして提供されることが発表された。
また、一度アップグレードした機器は「端末が寿命を終えるまで」
無料でサポートされるとしている。
MicrosoftのOS担当エグゼクティブバイスプレジデントであるTerry Myerson氏は「Windowsはサービスになる」と説明。
インターネットのサービスでバージョンを気にする人がいないことを例に挙げ、
それと同じように「Windowsのどのバージョンを使っているかという質問には
意味がなくなる」と述べた。
Windows8にて、GetDC(0)でデバイスコンテキストを取得し、BitBltにてデスクトップを キャプチャしようとしています。 (半)透明ウィンドウは除外したく、ネット上を見ているとSRCCOPYのみの指定でそれが 可能とあったのですが、映り込んでしまいます。 透明ウィンドウもしくは指定ウィンドウを除外したデスクトップキャプチャの取り方につい て教えていただけないでしょうか。
無理じゃね
ウィンドウを列挙して、透明ウィンドウを一時的に非表示にしてキャプチャ
これの話か?
http://dobon.net/vb/dotnet/graphics/screencapture.html >そのため、Opacityプロパティで半透明にしたフォームや、TransparencyKeyプロパティで一部を透明にしたフォームを正しくキャプチャすることができません。
>下で紹介するWin32 APIの方法では、BitBltの最後のパラメータを「SRCCOPY Or CAPTUREBLT」(C#では「SRCCOPY | CAPTUREBLT」)とすることで、これらのフォームも正常にキャプチャできます。詳しくは、
>透明ウィンドウもしくは指定ウィンドウを除外したデスクトップキャプチャ
>>347 Aero世代 (Vista) 以降なら DWM を使ってキャプチャを取るのが推奨なんじゃないの?
古いやり方なら WM_PRINT が使えるかもしれない。
まぁ、
>>349 で十分な気はするが。
353 :
デフォルトの名無しさん :2015/02/09(月) 08:46:42.20 ID:iJdyGTL3
354 :
デフォルトの名無しさん :2015/02/09(月) 10:43:01.17 ID:ra7crE5d
C#の最新バージョンか?
355 :
347 :2015/02/09(月) 20:48:21.80 ID:j6Bs3lE+
色々とご助言有り難うございます。 リアルタイムに処理したいため、ウィンドウを列挙して云々の方法は無理 そうなのでDWM APIの方を勉強してみたいと思います。 同じ関数でもWinバージョンによって挙動が変わるなら、MSもきちんと 明記して欲しいですよね。。。
VC++でMessageBox()でMB_ICONEXCLAMATIONで音を鳴らすと Win7だと『ホワーン』という優しい感じの音ですが、XPだと『パン!』っていう ちょっと耳障りな音ですが、このXPの音もWin7の『ホワーン』に出来ますか?
wav入れ替え
自分のPC1台の話か それともアプリからそれを使うユーザのマシン設定を勝手に書き換えたいという話か
音声自作してリソースで持って再生すればいい
361 :
デフォルトの名無しさん :2015/02/12(木) 10:47:44.82 ID:5O+Dt9At
CreateFontで作ったフォントを使ってDrawTextで描画すると勝手にアンチエイリアスがかかります。 高さだけ指定して幅を指定しなければアンチエイリアスがかからない幅に自動調整してくれますが、幅は指定したいです。 幅を指定しなくてもFW_BOLDを指定したときとしないときの幅が同じになればいいのですが、それもなりません。 何がしたいか分かりにくいと思いますが、まとめると以下の通りです。 ■太字かどうかに関わらず、全ての文字を同じ幅・高さで描画したい(日本語は2文字分) ■アンチエイリアスが嫌だ ■文字幅の値も把握していたい(自分が指定、もしくは自動で設定された幅を取得) コマンドラインみたいに升目に入ったような、アンチエイリアスもかかってないような表示が理想です。 そこに太字も使えるようになったのが理想です。 CreateFontで一番可能性の高そうな設定、フォントはMS ゴシック、クオリティはDEFAULT_QUALITY、ピッチとファミリーにFIXED_PITCHを設定しましたが無理でした。 他にも色々試しましたが昨日一日中あれこれ試していたので何が何だか分からなくなって覚えていません。 解決方法を教えてください。
クオリティをNONANTIALIASED_QUALITYにしたらどうかな?試してないけど。
363 :
361 :2015/02/12(木) 11:46:19.61 ID:5O+Dt9At
364 :
デフォルトの名無しさん :2015/02/13(金) 10:35:40.23 ID:f9ZjIrV9
何も動かしてなくてもWM_PAINTが呼ばれまくってCPU食いまくる なんだこれ
365 :
デフォルトの名無しさん :2015/02/13(金) 11:36:18.32 ID:f9ZjIrV9
俺の糞コードが原因だったわ
366 :
デフォルトの名無しさん :2015/02/13(金) 13:51:03.68 ID:dpVVOxpY
報告GJ
367 :
デフォルトの名無しさん :2015/02/13(金) 20:16:25.43 ID:f9ZjIrV9
InvalidateRectで更新する領域を指定できるけど、実際WM_PAINT受け取ったときはWPARAMにもLPARAMにもクケイ情報がないから分からない 必要な領域だけ再描画すれば高速化できるかと思ったけど肝心のWM_PAINTで領域が分からないなら結局クライアント領域全部再描画しなければならない 領域をグローバル変数に入れようかと思ったけど、WM_PAINTを受け取るタイミングが不確定だから無理っぽい 1回目のInvalidateRectと2回目のInvalidateRectの領域が同じならグローバル変数でもいけるけど、 違った場合は、2回目のInvalidateRectの後で1回目のInvalidateRectによるWM_PAINTを受け取ると破綻する まんこ
beginpaint
指定されたpathが C:\〜\test\test.exeならC:\〜\test\を取得 C:\〜\test1\test2ならC:\〜\test1\を取得 こんな関数はどんな名前つける? GetUpperDirectory?
>>369 PathRemoveFileSpec
っていうAPIがあるけど、敢えて自分で作るならって話か?
371 :
デフォルトの名無しさん :2015/02/13(金) 22:11:22.26 ID:f9ZjIrV9
>>368 BeginPaint何となく使ってたけどこいつが自動で設定してくれるだな
まさかこいつがやってるとは思わなかった
ありがとう
ExtractFilePath
GetBackToWhereYouOnceBelong
374 :
デフォルトの名無しさん :2015/02/13(金) 22:55:28.51 ID:f9ZjIrV9
俺だったら引数はファイル・ディレクトリ両対応にして GetParentDirectory
ありがとう PathRemoveFileSpecは知らんかった けど最後に\付いてほしいから結局部品プロジェクトとして作る事になるわ
\付いてほしい理由はなんだ? Path関連のAPIはたくさんあるから、目的によっては\無しでも問題ないかも知れんぞ
GetRandomRgn,GetMetaRgn,GetClipRgn
>>374 ファイルにたいして ParentDirectory は違和感あるから却下
Scripting.FileSystemObjectでは GetParentFolderName ってメソッド名だね
380 :
デフォルトの名無しさん :2015/02/14(土) 07:40:14.24 ID:xzkKcWkn
os.path.dirname(path) パス path のディレクトリ名を返します。これは split(path) で返されるペアの最初の要素です。 os.path.split(path) パス名 path を (head, tail) のペアに分割します。 tail はパスの構成要素の末尾で、 head はそれより前の部分です。 tail はスラッシュを含みません; もし path の最後にスラッシュがあれば、 tail は空文字列になります。 もし path にスラッシュがなければ、 head は空文字列になります。 path が空文字列なら、 head と tail のどちらも空文字列になります。 head の末尾のスラッシュは、 head がルートディレクトリ (1つ以上のスラッシュのみ) でない限り、取り除かれます。 join(head, tail) の結果は常に path と同じ場所を示すパスになりますが、文字列としては異なるかもしれません。
Pythonなど持ち出さなくても <filesystem> 使っておけばええねん
つーかディレクトリ名の取得なんてPerlの正規表現使えば1行で済む話だろ コーディングも1分もかからないし関数にするまでもないし何を悩んでるのか意味不明 2chブラウザ立ち上げてこのスレ開いてレス打つのと同程度の時間あればできるのに本物の馬鹿なんだろうか
383 :
デフォルトの名無しさん :2015/02/14(土) 09:30:31.92 ID:Be2NMpD8
なんでWin32APIと無関係な話を続けるの?馬鹿なの?死ぬの?(´・ω・`)
C/C++ライブラリってこのスレ的にはアウトなのか? Win32とC/C++ライブラリに同じ機能がある場合、使い分けの指針ってあるんけ? 自分はVC付属って時点であまり区別してないんだが
話題がそれてスレ違い、ってのは個人的には気にならないが、 はなから区別しないってのはねーわ。
386 :
デフォルトの名無しさん :2015/02/14(土) 10:28:41.92 ID:xzkKcWkn
*sprintf とか *wsprintf とか wstring とか文字コード変換も一緒にやってくれればいいのにと思うときはある
>>385 そんなジャンル別の縦割り思考だからお前はいつまで経ってもうだつがあがらないんだよ
時代遅れの縦割り思考は回線切って一人で分類ごっこでもしてろ
言語の話し始めたらVB、C#で埋まるに決まってんだろ すでにサーチエンジンはWin32API関連で検索してもそればっかで埋まってんだから
文字関連はWin32APIを使うべし
>>384 Win32はWindowsだけだけど
C/C++ライブラリはWindowsだけじゃないし。
まずwin32APIでしかできないことって何? .netじゃ駄目なんですか?
C#で全部出来て、Win32APIが一切不要なら、C#のDLLImportっていらないよね
Javaじゃダメなんですか? VBじゃダメなんですか?
海は死にますか 山は死にますか
397 :
デフォルトの名無しさん :2015/02/14(土) 19:18:36.15 ID:uz36DEeO
ウインドウクラス登録するときにLoadCursorでカーソル設定してもクライアント領域でしか有効にならないんだけど? ツールバーとかタイトルバーの上では普通のカーソルに戻る
>>397 偉そうなこと言いながら、こんな低レベルなことを
>>393 LoadLibraryで呼び出せるDllが作れないとか
これのせいでプラグインなんか作れないじゃん
401 :
デフォルトの名無しさん :2015/02/14(土) 19:51:07.13 ID:uz36DEeO
ネイティブのLoadLibraryはもちろんできないけど、.netベースのプラグインならむしろ簡単だろ。
プレイヤーの再生時間についてですが 曲の全体がduration 再生中の位置がposition とすると残り時間は何でしょうか?
405 :
403 :2015/02/14(土) 20:31:55.21 ID:ReAFsxko
すみません誤爆しました…
406 :
bti :2015/02/14(土) 22:13:21.42 ID:hFs/AfD2
>>399 ワロタwwww
LoadCursorwwwwwww
>>392 ありがとう
次からそっちのスレで聞くわごめんよ
409 :
片山博文MZ ◆T6xkBnTXz7B0 :2015/02/15(日) 13:19:53.66 ID:YOxjOULg
今時FFIすら使えない言語あるんです?
すでに存在するウィンドウに対してリソースのダイアログボックステンプレートから コントール(ボタンなど)を作ってくれるWin APIってありますか? CreateDialogのウィンドウを新規に作るじゃなくて、すでにウィンドウが存在する際につかえるAPIが知りたいです
412 :
デフォルトの名無しさん :2015/02/15(日) 16:10:07.40 ID:bX6frV1s
>>409 さっさとCOMのTypeLibrary対応してない言語で使えるようにしろ
>>411 ですが自己解決しました。ネットでソースありました
リソースからLoadResourceでメモリ上に構造体DLGITEMTEMPLATEなどの形で取り出してCreateWindowするようです
>>409 nm *.dll -> typeid -> boostデマングリング
のが手っ取り早そう
>>409 すいません。何するソフトなのか、簡単に解説して頂けませんか?
>>415 Win32コンパイラからWin32 APIの情報を抽出して、データベースを作成するソフト。
素人にはまだ使いこなせない。
>>416 解説ありがとうございました。
理解できるように精進したいと思います。
418 :
デフォルトの名無しさん :2015/02/15(日) 23:46:43.13 ID:65bKNNn8
片山と取り巻きの馴れ合いスレかよ 気色わる
片山MZはわりあいに有用な情報を流すからね自然と手下が多くなる確かQZも
片山MZは色々と試行錯誤するので、 見ているだけで、反面教師となって有益 自分が同じ間違いをしなくて済む この板は他にも、QZ、ピラフなど、 何らかの情報を発信する、有益なコテハンが多い。 この板は有益なコミュニティだ
421 :
デフォルトの名無しさん :2015/02/16(月) 03:43:59.12 ID:N4N5sFFI
客寄せパンダ
烏合の衆
>>420 反面教師しかいないのは、それはそれで…
424 :
デフォルトの名無しさん :2015/02/16(月) 09:38:43.55 ID:F7oc1qZ/
むしろ人払いしてるよな
そいつら全員同一なんだろ? 同時に現れたところを見たことないしw
EXCELの表計算の部分ってDataGridViewみたいな感じですが、そういう既存の APIで作られているのでしょうか? それとももっとLow Levelな手法で 作られているのでしょうか?
427 :
デフォルトの名無しさん :2015/02/16(月) 22:28:24.82 ID:PFbU5qB1
片山っていつも質問者に嘘回答してるクズじゃん 初心者騙して喜んでるただの荒らし
428 :
デフォルトの名無しさん :2015/02/16(月) 22:40:46.76 ID:PFbU5qB1
毎晩、酔っ払いの説教を聞いてると、こんな思考回路になるとじゃけんねん。しゃーねえ。
・同僚にだまされて腐った鯛を持って帰る ・ご飯に勝手にアルコールを入れる ・毎晩酔っ払った状態で説教 ・その上、タバコをべらんぼうに吸う ・肺が病気になってもやめない、逆に精神論で返す
・その上、パチンカスで給料の2/3を溶かす ・飲酒運転常習犯で自分は運転が上手いと考えている ・撮ったビデオをAVに放流する ・盗聴器や手錠や洗脳の本を持っている ・複数の宗教を手当たり次第に子供にやらせる
匿名だったら犯罪者は攻撃できないから安心だよ
犯罪者は根絶やしにしなければならない。
>>428 んでもキミはそういう分かり易い嘘以外では嘘だ嘘だとしか言わないだろ
その行為は、実は一見片山が正しいように見せる行為ですらある
…つまり、ハタから見ればキミは片山本人ってことになる
レス番がすごい飛んだけどキチガイが暴れたの?
そんなことをわざわざ確認するとか お前なんのためにNG機能とか使ってんの?アホなの?
437 :
デフォルトの名無しさん :2015/02/17(火) 09:14:33.07 ID:ZaoCuCHY
NG使ってる本人がNG使って書き込んで 反映されないので二重三重に投稿連投 ですねわかります
お前ら頭いいんだから、いい加減スレチなの止めてくれな。
Win7(IME10.1)で日本語の品詞一覧を取得しようとしたんですが、ImmGetRegisterWordStyleの戻り値がゼロになります GetKeyboardLayoutによるHKLの取得には成功していて、一応第3引数のポインタも指定しています 元々不具合のあった関数でもあるみたいなので、同環境の情報が欲しいので検証してもらえませんか?
補足。nItemに0を指定して品詞の取得に必要なバッファサイズを得る段階です
めんどくさいから int main() { ... } でコピペして実行できるやつ貼ってくれ そしてprintfで出た結果をここに貼るわ
ありがとうございます。マイナー言語で書いてるのでC++に移植してきます。VSを起動するの超久々ですが
>>442 というかそのマイナー言語でまずは書け
マイナーすぎて誰にも分からないときに移植コードで
>>443 HSP3.32です。sdimは文字列バッファの確保、varptrはそのバッファのアドレス、statは直近の戻り値です
#uselib "user32.dll"
#cfunc GetKeyboardLayout "GetKeyboardLayout" int
#uselib "imm32.dll"
#func ImmGetRegisterWordStyle "ImmGetRegisterWordStyleA" int, int, int
#define STYLE_DESCRIPTION_SIZE $00000020
hkl = GetKeyboardLayout()
mes "GetKeyboardLayoutの結果: " + hkl
;
http://gaiji.jjworkshop.com/cgi-bin/topic/topic.cgi?4を参考 sdim dummybuf, 256 * (4 + STYLE_DESCRIPTION_SIZE)
ImmGetRegisterWordStyle hkl, 0, varptr(dummybuf)
style_max = stat
mes "取得した品詞の数: " + style_max
VS2012でエラーが起きまくったもののVC++2010で何とか作成できたので貼ります #pragma comment(lib, "imm32.lib") #include <windows.h> #include <imm.h> #include <iostream> using namespace std; int main(int argc, char** argv) { STYLEBUFA stylebuf; HKL hkl = ::GetKeyboardLayout(0); int style_max = ::ImmGetRegisterWordStyleA(hkl, 0, &stylebuf); cout << "hkl:" << hkl << endl; cout << "style_max:" << style_max << endl; getchar(); return 1; }
GetKeybordLayoutする前にテキストボックスなんかにSetFocusしなきゃダメだったと思うわ
x64Win8.1で試してみたけど0しか返ってこないな。 決め打ちでバッファを用意しても中身空のままだし。
448 :
デフォルトの名無しさん :2015/02/18(水) 10:07:37.02 ID:0oFqPaUt
ユーザーが自分で登録した分しか出ないんちゃう?
>>445 ほらよ
単語に何も登録してない状態
hkl:04110411
style_max:0
単語に語句「OH! Manko」を読み「おまんこ」として登録した状態
hkl:04110411
style_max:0
結果は変わらなかった
LoadKeyboardLayoutとか使ってみてもダメだったね。 ググっても、昔のこのスレでも同じ質問があって解決レスは無かったw
フォーカスの有無やIMEのON/OFFも試したけどダメだったわ。>450時点で試してたことだけど。 なお、Win8Pro64bit ATOK2015 第2引数に0を入れてるのに、第3引数に有効ポインタ入れとかなきゃいけないって仕様がおかしいって 情報も見つかってたので、そもそもこのAPIが怪しい気はする。
>>452 事細かに試していただいて感謝します
ATOKとMS-IMEが成功可否に影響するというような情報も見つけた気がしますが、
今回の例ではたぶん根本的に原因が共通しているのでこちらでやっても同じ結果になると思います
こちらの環境を再掲しておくと、MicrosoftIME 10.1 on Windows7 HomePremium 32bitです
元々、辞書ツールから単語登録するのが面倒だから、
専用のTSVファイルをパッと開いて書き換えたらパッと単語登録されるようなツールが作りたかったんですが、
同じように列挙も登録もできず、周辺のAPIが全滅という有様でした
仮に単語登録が成功したとしても、ImmRegisterWordにはメモリリークもあるらしいですよ
チョンに外注したのか
単語登録だけで登録画面出てもいいならこれかな? 今動いてるコード std::wstring text(L"登録単語"); REGISTERWORD regword = {0}; regword.lpWord = const_cast<LPWSTR>(text.c_str()); (void)::ImmConfigureIME( ::GetKeyboardLayout(0), hWnd, //ダイアログの親になるウィンドウのHWND IME_CONFIG_REGISTERWORD, ®word);
458 :
456 :2015/02/19(木) 09:43:09.44 ID:GozftCKZ
>>457 わざわざありがとうございます。TSFにもそれらしいものがあり、登録画面ならこちらでも出せるっぽいです
本来の目的とは違いますが、ホットキーからクリップボードの内容をさっと登録する機能なんかに使えそうですね
459 :
デフォルトの名無しさん :2015/02/19(木) 13:33:25.45 ID:F2+DwIhl
指定したexeを起動してその起動したexeのハンドル取るAPI教えてんこ
>>459 自分で起動したなら簡単にハンドルは取れるはず
起動中のexeを列挙して探すなら Process32First / Next
HANDLE hProcess = NULL; DWORD processId = 0; PROCESS_INFORMATION pi = {0}; STARTUPINFO si = {0}; si.cb = sizeof(si); if(::CreateProcess( prog.c_str(), const_cast<LPWSTR>(param.c_str()), NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi)) { ::CloseHandle(pi.hThread); hProcess = pi.hProcess; processId = pi.dwProcessId; } 〜 if(hProcess) ::CloseHandle(hProcess);
462 :
デフォルトの名無しさん :2015/02/20(金) 11:42:43.98 ID:f+GBkftj
>>460-461 ありがとうございます。
両方ともプロセスハンドルはあるけどウィンドウのハンドルは無いっぽいですが
プロセスのハンドルでウィンドウ操作できませんよね?
463 :
デフォルトの名無しさん :2015/02/20(金) 11:47:11.05 ID:SdYWKWEv
条件後出しすんなボケ
464 :
デフォルトの名無しさん :2015/02/20(金) 11:54:24.97 ID:f+GBkftj
>>463 知らないならレスしないで下さい、ウザイだけです。
ひさびさに聞いたなそれ では死ね
>>462 ウィンドウを操作するのにプロセスのハンドルは要らないんじゃないか?
単にウィンドウを列挙するなら EnumWindows / EnumThreadWindows
ウィンドウを列挙した後、どのプロセスに属するか調べるなら GetProcessHandleFromHwnd
ウィンドウ操作はプロセスハンドルじゃなくHWNDだろがJK
>>466 追加。 プロセスに属するか調べるのは GetWindowThreadProcessId でも可
exeのハンドル=ウィンドウハンドルだと思いこんでる時点でお察し
470 :
デフォルトの名無しさん :2015/02/20(金) 14:33:18.61 ID:XfKuwL2S
トップレベルウィンドウを列挙
各ウィンドウのプロセスIDを調べる
目当てのプロセスIDが見つかったら、そのウィンドウのウィンドウハンドルを返す
http://d.hatena.ne.jp/yu-hr/20100323/1269355469 ただし、トップレベルウィンドウ(親ウィンドウがない普通の窓)が、複数あるようなアプリケーションでは、
Zオーダーが上の窓(より前面にある窓)が返されます。
なのでIEのような、1つのプロセスで複数のウィンドウが開くアプリケーションに対して実行する場合は要注意。
こんなやつにちゃんと答えてあげるなんてお前らやさしいな
464 名前:デフォルトの名無しさん[] 投稿日:2015/02/20(金) 11:54:24.97 ID:f+GBkftj [2/2]
>>463 知らないならレスしないで下さい、ウザイだけです。
472 :
デフォルトの名無しさん :2015/02/20(金) 15:35:47.64 ID:XfKuwL2S
少なからず本人が自分で考える力や検索する力を奪ってるので優しい訳ではない
どう考えてもコピペ
おまえらバカ、とくに 461 > exeのハンドル取るAPI教えてんこ これで気づけよ
そいつのためだけじゃねえんだよ
>>474 むしろ「指定したexe」から補えない方がどうかしてる
検索タブをアクティブにするよ、だけど検索を実際に実行はしないけどね って書いてあるだろ 中学出たのか?
なんで検索してくれませんか。
480 :
デフォルトの名無しさん :2015/02/21(土) 14:32:51.83 ID:TG3Ky+4O
ウィンドウを管理するクラス作って、そこにウインドウプロシージャも入れようとすると、staticにしなきゃいけないけど、こういうやり方って普通なの? 何か気持ち悪いんだけど俺が慣れてないだけ? それとも普通はウインドウの管理をするクラスなんか作らないとか?
staticで作ってインスタンス毎にウィンドウハンドルとclassdataで管理
MFCとかWTLならstaticにしなくてもクラスのインスタンスごとに管理できる
不特定多数に公開するライブラリを作るんでもなければ、クラスにするメリットないよね プロシージャをstaticにしたらメソッドにアクセスすんのめんどくさいし
GWLP_USERDATA or SetWindowSubclass
俺は、GWLP_USERDATAでthisを登録して、メンバ関数でウィンドウプロシージャを定義できるようにしたけど、 CreateWindowの中でもウィンドウプロシージャ呼ばれるから注意な 結局、CreateWindow呼ぶ前にstatic変数にthisを入れてCreateWindowの中でウィンドウプロシージャが呼ばれたときは、 static変数のthisを使うようにしたけど、気持ち悪いな。もっといい方法あるんだろうか
WTLはインラインアセンブラを使ってたような
>>485 CreateWindowのlpParam
実はWM_CREATEの前にもメッセージ飛んでるので 厳密にはCREATESTRUCTでは不十分だったりするのよね GWLP_USERDATA等の属性すら一切使わないWTLの実装が最強
>>488 WM_CREATEの前のメッセージで処理したいことって何ある?
>>487 こんな感じか。こっちのほうがだいぶいいね
LRESULT CALLBACK WindowBase::RealWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
WindowBase* pThis = (WindowBase*)GetWindowLongPtr(hWnd, 0);
if(pThis == NULL) {
if(msg == WM_CREATE || msg == WM_NCCREATE) {
CREATESTRUCT* ptr = (CREATESTRUCT*)lParam;
SetWindowLongPtr(hWnd, 0, (ULONG_PTR)ptr->lpCreateParams);
pThis = (WindowBase*)ptr->lpCreateParams;
pThis->m_hWnd = hWnd;
}
}
if( pThis ){
_ASSERT( pThis->m_hWnd == hWnd );
return pThis->WndProc(msg, wParam, lParam);
}
return 0L;
}
>>492 これは面白いなw
まじめにやろうとするとコード生成まで必要になるとか、Win APIどんだけアホな設計なんだって思う(まぁ古いから仕方ないんだが)
つまり、最初(CreateWindowで呼ばれた時)は、スレッドごとのグローバル変数にインスタンスへの参照を持っていおいて、
最初にウィンドプロシージャが呼ばれた時に、ウィンドウプロシージャをコード生成で生成した関数に置き換えるってことだな
WTLはCreateWindowのlpParamじゃなくて、static変数のほうだったか。やっぱりコード戻すわ
うーん、そういうのは UI スレッドにお任せだ‥
キーボード/タッチパネル等でマウスを操作するアプリを作りたいのですが、 マウスが繋がっていない環境(windows8タブレット)などで、マウス表示の方法がわかりません。 ShowCursor(TRUE); を使えばいいかと思ったんですが、 この関数は、 カーソルを表示するかどうかを決める内部的な表示カウントを設定します。 カーソルは、 表示カウントが0以上のときに表示されます。マウスがインストールされているときには、 初期表示カウントは0になります。マウスがインストールされていないときには、 −1になります。 ということなので、頭抱えています。 なにかいい方法ありませんか?
>>495 すぐ思い付くやり方は透過ウィンドウを使う方法だな。
SetWindowRgn
>>497 なるほど。。簡単そうなのは、透過ウインドですかねぇ。。?
ちょっと思いついたのは、マウスの仮想ドライバー作るとか?証明関連で悩みそうです;;
なんか簡単に、偽物じゃないOSのマウスが表示できればいいのですが・・
狂気に満ちたやり取りで頭が混乱しているが なぜマウスが繋がっていない環境で、マウス表示をしなけりゃならんのか
タブレットPCでスクリーンキーボードを使ってピクセル単位の操作がしたい、とか?
>>499 Win8タブレット前提で、タッチパネル上でマウス・キーボードを操作するアプリを作りたいからですよ?
既にそういうアプリはあるのは知っています。
もうあれよ、既存のマウスを操作するアプリじゃなくて、キーボードで操作する仮想マウスドライバ書け
セキュリティホールにしかならないから止めてくれ
505 :
デフォルトの名無しさん :2015/02/22(日) 01:31:59.12 ID:uJK2QFdc
SuperFishの証明書発行しとけ
ウィンドウやビットマップを1000個作って明示的に解放せずに(強制)終了させたとき、 それらのリソースはOSが勝手に解放してくれるんですか?
509 :
デフォルトの名無しさん :2015/02/22(日) 07:16:57.24 ID:uX3Bvmht
されないものもある
510 :
デフォルトの名無しさん :2015/02/22(日) 13:44:25.32 ID:o1GxeALa
詳しい人教えてください。 Windows環境で実装しています。 DLL AとDLL Bが有るとします。 DLL Aで、 void Func_A(FILE* pFP) { fprintf_s(pFP, "%d", 123); } と実装し、Func_Aはエクスポートされていて、DLL Bから利用可能な状態となっているとします。 またDLL Bでは、以下のような関数を実装しているとします。 void Func_B() { FILE* pFP = NULL; fopen_s(&pFP, "./hoge.txt", "w"); //もしくはfopen()を使う Func_A(pFP); fclose(pFP); } この時、VCの「マルチスレッドデバッグ(MTd)」でビルドした上で、 DLL BのFunc_Bを実行すると、Func_A内のfprintf_sで、エラーになります。 ※エラー内容:「要求した操作で必要なオブジェクトの種類と要求に指定したオブジェクトの種類が一致しません」 (DLLをまたいだ、内部的な、ファイルポインタ関係のメモリ操作違反?!) なおVCの「マルチスレッドデバッグDLL(MDd)」でビルドすると、エラーは出ません(共通のCRTを使うため?!)。 MTdでビルドする際に、DLL BのFILE* pFPを、DLL Aに安全に渡して引き継がせる方法ってないんでしょうか。
DLL AとDLL Bを同じ種類のCRTライブラリー使うようにしろ
ありがとうございます。
>>511 リンク先のCausesと、ファイルハンドルのExampleによると、オプションMT(d)は無理みたいですね。
リンク先のページを教えてもらって助かりました。
>>512 オプションMD(d)を使うしかないんですね。
>>513 ソースをいじれるなら、OS側のハンドルに変換して渡す方法もあるかと
(FILE系関数を使わずに全部APIでやる方法もあるが…)
こんな流れで
[ Func_B ]
FILE*からfd(ファイル記述子)へ変換:_fileno()
fdからhandleへ変換:_get_osfhandle()
[ Func_A ]
handleからfdへ変換:_open_osfhandle()
fdからFILE*へ変換:_fdopen()
出力後はfflush()してから戻ること
ノートPCのバッテリへの電気供給をON/OFFに出来るAPIってある?ACPIってやつの制御?よくわからないけど
アクティブウインドになる前のアクティブウインドを調べる方法は有りますか?
517 :
516です :2015/02/23(月) 08:36:14.15 ID:u+Zi8bbf
case WM_ACTIVATE: { HWND hBack = SetActiveWindow(GetActiveWindow()); return 0; } これはだめでした。。 スレッドやSetTimerなどで、GetActiveWindow()を動かして監視するしかないかな?
hookやね
うむ。 WH_CBT が最初に思い浮かんだが、 Alt+Tabででてくるリストを取得する方法があれば常駐しなくて済むかも。 後者の手段は知らない。
520 :
516です :2015/02/23(月) 09:30:22.21 ID:u+Zi8bbf
GetActiveWindow()だめでした。ヘルプ読んだら、関連付けされているスレッドのみ有効>< タイマーかスレッドで、GetForegroundWindow()使えばいいのかなと思いました。 EnumWindowsでアクティブウインドウを調べようかと思ったんですが、不具合出てきたら、フックのほうが正確かもしれませんね。
WM_ACTIVATEのlParamに入ってなかったっけ
入ってるよ
>>521 なんと!
lParamに入ってましたか!
ありがとう!
メッセージ処理する時にwParam lParamの意味を調べるのは基本
主要メッセージのlParam,wParam,戻り値の一覧みたいなの無かったっけか 前にどっかで見た気がするんだが
一覧にする必要性を感じない 何が便利になるんだ?
527 :
デフォルトの名無しさん :2015/02/24(火) 14:46:11.67 ID:oePtv8Lt
子ウインドウAのリストビューの項目をクリックしたら、子ウインドウBにそのマンコを表示してアクティブにしたいんだけど、子ウインドウBがアクティブにならない SetFocusもSetActiveWindowも両方試したけど駄目だった リストビューをクリックして子ウインドウBに表示されたマンコをキーボードの矢印で上下左右に動かしたいんだけど、 フォーカスが移ってくれないからキーボードの矢印を押すとリストビューの選択が動く 子ウインドウBをクリックすればちゃんとフォーカス移ってキーボードで操作できるけど、いちいちクリックしてるとマンコの損失がでかい ちなみに、なぜか子ウインドウAの項目をキーボードの矢印で選択したときはちゃんと子ウインドウBにフォーカスが移る 何だろうな、こういうことでも起こってんのかね 子ウインドウAでマウスダウン→子ウインドウBにマンコ表示→子ウインドウBアクティブ→子ウインドウAでマウスアップ→子ウインドウAアクティブ
NM_CLICKのタイミングでフォーカス移しても駄目か?
529 :
デフォルトの名無しさん :2015/02/24(火) 21:39:42.01 ID:oePtv8Lt
>>528 ありがとう
でも駄目だった
結果は変わらず
モードレスDialogでタイトルバーに --------------------------- [-][□][x] --------------------------- 最小化、最大化、閉じるボタンの三つがありますが、 そのうち最大化のみ消して --------------------------- [-][x] --------------------------- にできますか?方法教えて下さい。
>>527 マウスボタンを押して離すまでがクリックですよ!
離すまで待ってみないと、本当にクリックなのかそれともドラッグするか
おっと操作ミスった!でキャンセルするかわからんからな
リストビューでも、押した時点で選択は変わるけど
離すまでの間はマウスをキャプチャした状態になるみたいだ
だからマウス離したところでフォーカス移せばいいんでね?
> 子ウインドウBがアクティブ MDIか?
>>532 disableには出来たんですが非表示に出来ないんです。それと最小化ボタンをクリックしてもイベントが飛んで気ません。どうしたらいいですか?
>disableには出来たんですが非表示に出来ないんです。 知ってるよ
537 :
デフォルトの名無しさん :2015/02/25(水) 11:21:20.24 ID:d0ie9jrP
ダイアログで良くね?
>>530 自分でタイトルなしのウインド作ってほしいボタン貼り付けたら?
最小化ボタンは、SendMessage(hWnd,WM_SYSCOMMAND,0xF020,0); とか使って実装すればいいと思うよ?
539 :
デフォルトの名無しさん :2015/02/25(水) 12:56:42.77 ID:d0ie9jrP
style = WS_POPUP | WS_BORDER | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME;
で作ったらタイトルとXボタン付きで最小化ボタンと最大化ボタンの両方が消えた
style = WS_POPUP | WS_BORDER | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | DS_MODALFRAME;
で作ったら最大化ボタンが一緒に出て来てしまう(無効にはされてるが)
なので
>>538 さんの言うように
style = WS_POPUP | WS_BORDER | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME;
で作って最小化ボタンだけ自分で描く 👀
540 :
デフォルトの名無しさん :2015/02/25(水) 12:58:58.35 ID:d0ie9jrP
最近自分のレスの末尾に が付くことが多いんだけど これってなんなの? 入れた覚えないんだが
みなさんレスありがとうございました。 アドバイスに従っていろいろ試したんですが、結局、難しいので諦めました。それで、 モードレスダイアログをCreateDialogで作り、[-][□][x]の三つのボタンを付けました。 でも、[-]や[□]を押しても何も起こりません。[x]を押すとWM_CLOSEが来るのですが。 どうすれば[-]や[□]を検出できますか?
なんで諦めたのにダイアログにしたの? 何も起きないのはダイアログのウィンドウプロシージャがそのメッセージを拾ってないからでしょ WM_SYSCOMMANDを受けてwParamに応じてCloseWindowかなんかすればいいと思うけど
>>542 モードレスダイアログを作りたいのです。
追加で質問なんですが、
SendMessage(hDlg, DM_SETDEFID, IDC_BUTTON, 0);
とするとデフォルトボタンを設定できますけれど、IDで指定するのではなく
ボタンのhwndを指定してデフォルトボタンを設定する方法ありますか?
さあ ただGWLP_IDかなんかで手動でリソースIDを設定できた記憶があるからその延長でできる気がする
>>541 本体のウィンドウのメッセージループで
IsDialogMessage() チェックして
モードレスダイアログ宛てのメッセージはスキップして
ウィンドウ側で処理せずダイアログに渡す必要がある
545さん!物凄い分り易いサンプルプログラム大変有難うございました。 早速試させていたいだいたのですが、 私の場合、最小化ボタンを付けたいので、サンプルのDlgProc()を変更して case WM_INITDIALOG: SetWindowLong(hDlg, GWL_STYLE, GetWindowLong(hDlg, GWL_STYLE) | WS_MINIMIZEBOX); return TRUE; のようにしたら、最小化ボタン出たのですが、これで最小化ボタン押しても何も反応しません。 これが私が最初の質問だったのですが、この最小化ボタンを押して最小化するにはどうすればいいのでしょうか? そもそも追加した行は、ググッて見付けたものを適当にコピペしたので、これで良いのかどうかも分っていません。 よろしくお願いします。
548 :
デフォルトの名無しさん :2015/02/25(水) 19:50:24.61 ID:uRiqOZSm
WndProc 中の tpl.dlg.style |= WS_MINIMIZEBOX; の行をコメント外して DlgProc()を変更して case WM_INITDIALOG: SetWindowLong(hDlg, GWL_STYLE, GetWindowLong(hDlg, GWL_STYLE) & ~WS_MAXIMIZEBOX); return TRUE; としたら最小化できたよ
>>548 サンプルプログラムで無事に最小化出来ました。
一方、私の場合、テンプレートではなくてリソースでダイアログを作っていました。
それで
case WM_INITDIALOG:
SetWindowLong(hDlg, GWL_STYLE, GetWindowLong(hDlg, GWL_STYLE) | WS_MINIMIZEBOX);
return TRUE;
としたら最小化ボタンが出たのですが、これが無反応でした。それでリソースのプロパティの設定でMinimize box=Falseになっていたの
に気付いて、trueにしたら、無事に最小化できました。この場合、WM_INITDIALOGでの設定は不要でした。
ということは、リソースでMinimize box=FalseにしてWM_INITDIALOGでSetWindowLongで有効化しても、
確かに最小化ボタンは現れますが、クリックに反応しないんですね。リソースでtrueにする必要があるんですね。
一体両者で何が違うんでしょうか?
いずれにしましても、今回は、大変分り易いサンプルを作って頂きまして大変有難うございました。
大変感謝です。
550 :
デフォルトの名無しさん :2015/02/25(水) 22:01:28.25 ID:RgCL3LuA
リソースから造ってもテンプレから造っても同じ動きをしているね
もし分れば、もう一つ教えて下さい 546さんのプログラムで、ダイアログがキー入力を受け付けるように するにはどうすればよいでしょうか?私のプログラムも同じく、 キーを押すとピンという音が鳴って、キーを受け付けてくれません。
552 :
片山博文MZ ◆T6xkBnTXz7B0 :2015/02/25(水) 23:23:20.19 ID:mKx2rGPv
__alignof(IMAGE_DOS_HEADER)が2になるのはなぜ? LONGがあるから4じゃねーの?
>>552 #pragma pack(push,2) されている。16bit時代との互換性だろう。
メモリ上にコピーするぶんには4byte alignで問題ないだろうが、
mmapする場合には2byte alignされているのを考慮しないとbus errorの恐れがあるな。
名前欄に「エスパー求む」と書いておいてほしいな
Win32APIスレってこんなに穏やかだったっけ う〜ん、泣ける
558 :
エスパー求む :2015/02/26(木) 15:30:17.95 ID:cGnKpNs3
>>557 そういや前はID無かったんだっけ
IDがここまで治安に関わるとはなぁ…
穏やかにはなったけど有益なレスが極端に減ったよね 2chで議論したり質問したりするメリットがほとんどなくなった 惰性で見てる奴がほとんどだろう
ここまで有益なレスがレスが極端に減ると代償は大きすぎたんじゃないかとは思う 最底辺を這いずり回ってる人から見ればレスの質の違いはほとんど感じられないのだろうけど
んじゃ有益なレスをどーぞ
有益なレスはむしろ増えたと感じるよ と言うか前はノイズそのものしか存在しなかった
このスレを荒らしてたのとアンチhogeで荒らしてたのは同一IDだったな。 ついでにID導入に反対して自治スレ荒らしてたのも同じ奴だろう。
>>560 このスレに限らず、2ch 全体の傾向
特に技術系のスレは軒並み衰退してる
>>564 そうそう、seikyo さんだったっけ‥
>>514 OS側のハンドルに変換して渡す方法を教えていただき、ありがとうございます。
実は、アプリの構成が以下の様になってます。
exe本体
DLL_1 ツール
DLL_2 出力フロー制御、出力サブA
DLL_3 出力サブB
DLL_4 出力サブC
DLL_2が出力の流れをコントロールしており、
DLL_2の出力フロー制御を行う関数の手続きに沿って、最初にDLL_1でfopen_sして、DLL_2〜4で出力したいと考えてます。
教えてもらった方法に基づいて色々試してみた所、MTdでもエラーが出ずに出力できたのですが、
exe終了時に、DLL_3でエラーが出てしまいます。
工夫が必要なようなので、自分でちょっと考えてみます。
>>567 なんでそんなにDLLがあるのにライブラリと静的リンクしにゃきゃいけないんだ?
winAPI でまとめたほうがいいよ‥
各dllにはファイルに直接出力させずにバッファに書き出させてから呼び元一カ所でファイルに書けばいいのでは?
571 :
デフォルトの名無しさん :2015/02/27(金) 23:54:54.98 ID:iW29o0bD
>567 オープンも書き出しもクローズも一箇所にする 書式指定の書き出しはこんなふうにまとめる void hoge(FILE *fp, char *function, char *format, ...) { va_list arg; va_start(arg, format); vfprintf(fp, format, arg); va_end(arg); } あとはそれぞれ呼び出すようにする で、どうですかね
mallocしたのを別のDLLからfreeするのはいいんだっけ?(CRTと静的リンク時)
よくわからないが、自信がなければ #define malloc(size) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (size)); #define free(p) HeapFree(GetProcessHeap(), 0, (p)); に置き換えれば問題ないだろう
そもそも別のDLLからfreeする必要性がわからん
いらなくなったらそっちで解放してねーってありえへんの?
専用の解放関数もエクスポートする。 Win32API なら CoTaskMemFree() が標準的に使われている。 operator delete をオーバーロードしてもいい。
素人のクライアントが頑張って考えてくれた糞仕様的でとてもよい
メモリ確保処理と解放処理は、必ず同じものがしなさいと教わりました。 これは、正しいですか?
全て同じプログラムがしているので正しい
>>578 「同じもの」とは何を示してますか。日本語で宜しく。
あえてこのスレで聞くということは ↓みたいな組み合わせを変に混ぜて使うなという意味かな それなら正しい new と delete malloc と free GlobalAlloc と GlobalFree
横からだが、
>>581 それなら「同じものを使いなさい」という表現じゃないかな。
「同じものがしなさい」なら
・呼び元が確保したなら呼び元が開放しなさい
・呼び先が確保したなら呼び先が開放しなさい
という意味だと思うが
583 :
デフォルトの名無しさん :2015/02/28(土) 12:33:51.19 ID:MySCamNG
アプリ終了時にOSがやってくれる
>>574 例えばSTLのvectorをDLL境界を超えて渡すとか
CRTと動的リンクしてれば問題ないんだけどね
shared_ptrに包んで渡せば問題ない
>>585 vector自体の解放はそれでいいけど、push_backとかしたらアウトじゃん
587 :
デフォルトの名無しさん :2015/02/28(土) 15:28:10.11 ID:JFYCQWYV
vectorなんざ使ってるのは女子供だけだからどうでもいい
intのところもLONGだな
16bitのときのまま直し忘れかな
あるあるネタ
OS2のbitmapだとBYTEみたいね
msdnが間違ったままなのは論外として、それはそうとしてもバグる前に ビルド時点で気付かんものか?
コンパイルが成功するケースとして 気付かないアクセス方法を使ってたり BMPHEADERのサイズを数え間違ったりする原因にはなるな
スクリプトで構造体を弄るときは自分でアドレス計算しなくちゃならないからな
そもそもドキュメントなんか信用するからだ
まあな。うちの会社もドキュメントが無くて、ソースが仕様書って言われたしw
最終的にはVSのインテリセンスで確認して気づいたのも確か 猫以下の公式は信用できないな
昔はまって原因判らなくて困って別の方法とったことがある気がするんだがコレだったのか
おかしいのはMFCATLカテゴリの日本語版だけで英語版やWin32APIの方は正しい 単にメンテされてないんだろう
603 :
デフォルトの名無しさん :2015/02/28(土) 20:57:16.77 ID:JFYCQWYV
つーか英語読めないヴァカはプログラミングするな
>>822 おいらは逆だなw
女子高生においらのスカートの中を盗撮してほしいwww
イメクラとか行ったらそういうプレイやってくれるかな?ww
>>578 同じ「階層」に位置する場所でやるのが一番いいと思うな
関数呼び出しの深度、と言い換えてもいい
>>606 それは無理がある
例外の発生とかで解放処理を行なう場合、階層を合わせるのは難しい。
>>607 デストラクタで解放すれば例外が発生しても同じ関数の中で解放できるだろ
何が難しいんだ?
>>608 解放処理は1箇所でもできる。
確保は1箇所(例コンストラクタ)とは限らない。
むしろ、Createなんちゃら、とかOpenなにがし、とかの個別関数で行なう場合が多い。
>>609 何が言いたいのか分からん
> 確保は1箇所(例コンストラクタ)とは限らない
当たり前。そのクラスのメンバ関数で確保したものは、そのクラスのデストラクタで解放するのが普通
同じ階層で確保・解放できるじゃん
>>610 初心者か?
すべてのメンバ関数の階層が1層しか無いのなら可能ではある。
ただ、余程小さなクラスでもない限りメンバ関数が階層構造になるのが普通。
オブジェクト指向といえど構造化プログラミングの原則は変わらない。
メモリ確保などの詳細処理は、それを管理する側(処理)から呼び出して利用する。
>>611 メンバ関数の階層構造なんかどうでもいいんだよ
確保したものをメンバ変数に入れておけばデストラクタで解放されるんだから同じ階層ってことでいいだろ
そんな小さい話じゃねーよ
>>611 Cしかやったこと無いんじゃないのかな
例外だのRAIIだのGCだの知らない人に見える
>>615 勘違いしていた。失礼した。
しかし言葉の上とは言え、メンバ変数に入れておけばどのメンバ関数で扱っても同じ階層と見なすという主張は乱暴に過ぎる。
強いて言えば、階層というより同じインスタンスで扱うといったところかな。
>>616 同じインスタンスって継承とかしてたらおかしくならないか
基底クラスが確保したものを派生クラスが解放するのはおかしい
そういう意味で階層の方が適切だと思う
>>617 確かにそうだが。
もともとが関数の呼び出し階層のことを言っていたからな。
言わんとしていることは分かるが、正直 適当な言葉が見つからない。
結論としては メモリの確保と解放を、同じ関数呼び出し階層で行なうことに意味はない。 解放は1ヶ所(デストラクタ)で行ない、確保した階層に拘るべきではない。 ということでよろしいか?
621 :
デフォルトの名無しさん :2015/03/01(日) 04:33:03.03 ID:LYwpGVQL
スレチ
同クラスのメンバ関数で起こった確保を同クラスのメンバ関数で解放することを 同じ階層と呼ぶことに特に違和感はなかったけど、メンバ関数が階層構造になるってどういう意味? はぁ〜Win32API、いいじゃない
>>617 なんで1確保1解放になる前提なんだ?
確保
→解放⇔確保
→確保されてたら解放
ってのもありえるだろう
スレチ+1
>>622 C++は関数型言語ではないため、関数そのものを第一級オブジェクトとしては扱えない。
厳密な意味での関数の階層構造、いわゆる高階関数はあり得ない。
まあこの場合は、単純に呼び出し階層のことを階層構造と言っているんだと思う。
>>625 C++11(C++0x)からはラムダ式をサポートしているから高階関数も記述できる。
スレチ++; if (スレチ > 1) exit(0);
unsigned int スレチ = 0; if (--スレチ < 0) exit(0);
2ちゃん終わるってね、さようなら
630 :
デフォルトの名無しさん :2015/03/02(月) 21:09:54.74 ID:/ZttR8id
やっとできそうだぞ
http://gigazine.net/news/20150302-ikea-qi-wireless-charging-furnishing/ 19 :デフォルトの名無しさん:2012/09/05(水) 17:16:26.07
当然のことだけどプロバイダ契約とシンクライアントの契約は同時に行うことになる。
通信環境も劇的に向上するから、無線のインターネットでも論理値10Gbps、実測値8Gbps程度になる。
そしてすべての家庭からモデムやルーターが消える。
さらに多くの一般家電製品ががインターネットに直線接続するようになる。
今スマートホンで操作できる炊飯器やオーブンレンジがあるが、あれはスマートホンを炊飯器などにかざす必要がある。
しかし2014年にはそれらがインターネットに直線接続されるため、スマートホンをかざさなくても操作が可能になる。
グラフィックも大幅に改良され、タブレット端末でありながらリフレッシュレートが400Hz近くになる。
内臓GPUも高性能でかなり重い3Dゲームでも200fps程度で普通に動く。
電力消費も心配する必要はない。
現在のスマートホンなどに利用されている非接触型の充電設備が至るところに作られる。
飲食店やホテルや旅館の机、電車やバスの車内の壁、駅のロッカー内、トイレの鏡の前にある荷物を置くスペースなど、
ありとあらゆるところが非接触型充電器となる。
そんなコストのかかる話を多くのところが導入するはずかないとおもかもしれないが、それは間違いだ。
非接触型充電の可能なテーブル等は意識しないほど当たり前の存在となる、今で言えば照明設備のようなものだ。
照明設備のない飲食店やホテルを見たことがあるだろうか?日本中探せばないことはないだろうがかなり珍しいレベルだし、
照明がある店を見ても気にならない。
気にならないというよりむしろ意識に入ってこないほど当たり前の状況だ。
2013年後半にはそのレベルで非接触型充電設備がいたるところに導入される。
当然家庭のテーブルやベッドも、非接触型充電機能のついたものが今とほとんど変わらない値段で売られるようになる。
そんな時代がもう目の前なんだよ。
そうか あと10年か
633 :
デフォルトの名無しさん :2015/03/04(水) 13:07:36.31 ID:tgLNzxz5
VariantInit(&x)した変数xは、使い終わったら必ず VariantClear(&x)する必要ありますか?
Initしただけなら要らないし、整数とかの値型でも要らない。 ただ普通はVARIANTをラップしたクラスを使うのではないか。
635 :
デフォルトの名無しさん :2015/03/04(水) 13:25:32.16 ID:tgLNzxz5
>>634 レスありがとうございまし。
>VARIANTをラップしたクラス
CComVariantというやつでしょうか?
使っていません。もう一つ質問なのですが、BSTRを
SysAllocStringでxに入れた場合、解放はSysFreeStringでもVariantClearでも
どっちでもいいんですよね?
>>635 どっちでも一緒だが、VARIANTに入れたならVariantClearが自然だと思うが。
あと、使っていません、じゃなくて、使うべきだということだ。
まぁ、pure-Cで書きたいならリークしないようがんばれ。
サブクラス化するときにわざわざCallWindowProcを使う理由って何ですか? そのままWndProcを呼び出せばいいような気がしますが
他の誰かがフックしてたら?
639 :
デフォルトの名無しさん :2015/03/04(水) 16:47:31.58 ID:kF2z/wHc
他の誰かがフックしてたらどうすんだって聞いてんだよ!!
すみません。チェインを繋ぐときにCallWindowProcの第一引数に元々あった関数ポインタを指定しますが、 それと同じものをCallWindowProcを使わずに手動で呼び出したらどういう不都合があるのかという意味です
641 :
デフォルトの名無しさん :2015/03/04(水) 17:31:14.35 ID:m8Ib0gvC
どっかにWin32APIの関数と引数と定数をCSV形式にまとめたものない? ないなら自作するから別にいいんだけど
>>640 まずは先にMSDNに当たろう。
> Windows NT/2000:CallWindowProc 関数は、Unicode から ANSI への変換を行います。ウィンドウプロシージャを直接呼び出した場合は、このような変換は行われません。
A系とW系が混ざったときに意味がある。
ただ、いまや全てがNT系になっているから、おそらく何もしていないとは思う。
>>643 ごめんなさい。見落としていたみたいです
あまり混ざる状況が想像できませんね
printf("DoWonders、これは事件だ!\n");
最後改行するならputsじゃあかんの?
647 :
デフォルトの名無しさん :2015/03/05(木) 09:58:20.60 ID:3wyFIaYr
DLL(自作) EXE(他作,ソース変更できない。 DLL使う) の場合にEXEを複数起動したとして、DLL間で構造体を一個共有したいのですが、 どんな方法がお勧めですか?キーワード教えて下さい。
CreateFileMapping
649 :
デフォルトの名無しさん :2015/03/05(木) 11:11:26.47 ID:3wyFIaYr
>>648 レスありがとうございます。
質問した後ぐぐって調べて
CreateFileMapping
CreateNamedPipe
などを使えば出来るのかなと思ったのですが、どっち使ってもできますか?
1から10まで聞くつもりか
651 :
デフォルトの名無しさん :2015/03/05(木) 11:38:06.57 ID:3wyFIaYr
CreateFileMapping は共有メモリー作成に使える。 CreateNamedPipe は、他のプロセスとの通信に使える。
653 :
デフォルトの名無しさん :2015/03/05(木) 12:00:11.48 ID:NOA7K+lC
654 :
デフォルトの名無しさん :2015/03/05(木) 12:03:17.13 ID:3wyFIaYr
>>652 解説ありがとうございました。少し分ってきました。今回はCreateFileMapping
を使うのが良さそうな気がしますのでそれで試してみます。
もしCreateNamedPipeを使ってDLL同志でプロセス間通信をした場合、EXEの動き
と関係なく勝手に通信してもEXEの動きがおかしくなるとか、そういうことは
ありませんか?
>>654 パイプ内のデータ量に注意が要るだろう。 空なら読み側がブロックされるし、一杯なら書き側が。
メモリマップの場合は排他処理が要るだろう。 マップしたデータの更新中に読み取ろうとするとおかしくなることも。
具体的にやりたいことが分からんけどDLLDLLと連呼するからにはシェルとの親和性は考えてないんでしょ パイプにするメリットはないでしょ
657 :
デフォルトの名無しさん :2015/03/05(木) 16:40:12.83 ID:3wyFIaYr
みなさん有難うございました。
CreateFileMappingでどうにか出来ました。(たぶん)
排他制御はしていません。
>>653 さんの
#pragma data_seg("hogehoge")
の方法は、ビルドは出来たのですが実行するとEXEが異常終了しましたが
何が悪いのか良く分らなかったです。
頭が悪い
659 :
641 :2015/03/05(木) 18:09:03.90 ID:gcFJJov5
1件もレスが来ないということは恐らくないんだろうな しゃーない、スクリプト書いてmsdnから生成するか
真面目にレスしそうになったじゃん やめろよそういうの
662 :
デフォルトの名無しさん :2015/03/06(金) 00:40:32.17 ID:ci1Iacgw
DialogBoxWで作ったダイアログにPictureControlを一個貼り付けて 32x32 24bitのアイコンを貼り付けると、周囲がギザギザになるんです。 アイコンの絵柄は円形です。その円の縁がギザギザになります。 どうすればスムーズに描けますか?Win7です。
クリップボード系関数ってめんどくさい構造してんな〜
VB臭がする
PictureControlの色とギザギザの色を近くしてごまかす
>>660 意味不明
アピールって何?
お前の意味不明なレスは迷惑だから書き込まないほうがいいよ
ダイアログはドットとピクセルが 1:1 じゃないんだっけ
>>668 2ch自己解決してるレス全てに言ってこいよ
言ってこなければお前は煽りたいだけのただの荒らしということになるが
反省しないタイプかよ
片山うぜー
片山をNGにしてる可能性
クソコテNGアピールかと思ったら天然だった
>>669 論点ずらして口調真似るしか思いつかなかったんかな
サブクラス化というのを勉強中で、他のウインドウの ウィンドウプロシージャを取得したいのですが、調べたら (1) GetWindowLongPtr (2) GetClassLongPtr で取得出来そうですが、あるいは、 (3) SetWindowLongPtr でも変更前のウィンドウプロシージャのアドレスが戻り値で得られるようですが、 結局どれを使えばいいのでしょうか? 試したところ取得した値は(1)!=(2)==(3)でした。 なぜ(1)は値が違うのでしょうか?それにも関らず、どのアドレスを使ってもサブクラス化の実験 はうまく行きました。ますます分りません。初心者に簡単に解説お願いします。
訂正 誤 (1)!=(2)==(3)でした。 正 (1)==(2)!=(3)でした
訂正 (1)==(3)!=(2) でした。 たびたび間違ってすみません。
とりあえず普通の用途ではWindowLongPtrの方を使う ウィンドウはハンドルごとに動的にプロシージャを書き換えられるけど、 ウィンドウクラスごとの既定のプロシージャの読み書きをするのがClass系だと思う 推測が正しければ、buttonクラスをCreateしたあとにSetClassLongPtrしても既存のボタンは無変化
動的サブクラス化はSetWindowSubclassの一択。 他はもう忘れろ。
ああ、その通りだな。SetWindowSubclassを使ってくれ
目的が果たせりゃ手段なんてどうでも良いんだよ
>>679 >>680 >>681 >>682 レスありがとうございます。SetWindowSubclassも試してみましたところ上手く行きました。
いろいろ試しているうちに分らなくなって来たのですが、サブクラス化してMyWndProc()に置き換えたとして、
関数の末尾で
return CallWindowProc(DefWindowProc, hWnd, msg, wp, lp); //(1) SetWindowLongPtrの場合
return DefSubclassProc(hWnd, uMsg, wParam, lParam); //(2) SetWindowSubclassの場合
などどしますよね。
例えば(1)の場合に、DefWindowProcを呼び出していますが、この関数の代わりに、予め
auto WndProcOrg = GetWindowLongPtr(hWnd, GWLP_WNDPROC);
で取得しておいた関数を
return CallWindowProc(WndProcOrg , hWnd, msg, wp, lp); //(3)
としても同じ動きをします。
MyWndProc()の末尾で呼び出すべき関数はDefWindowProcかWndProcOrgのどちらが良いのでしょうか?
SetWindowSubclassの方法でやる場合も同じ疑問があります。良く分りません。
サブクラス化が二重に起こる可能性があるならDefじゃない方
そのWndProcがサブクラスになりうる(最下層でなくなる)場合と言った方が適切かな
autoとか久々に見た気がする
度々連レスしてすまんがSetWindowSubclassはDefSubclassProcとセットでこれで全部解決する 俺が言ったのはそれ以外の関数によるサブクラス化の話な
>>686 そのautoは、もう昔のautoじゃないんだぜ。
>>687 たびたびレスありがとうございます。
結論としては、SetWindowSubclassとDefSubclassProcの組み合わせ
使っておけばどんな場合でもこれでサブクラス化が出来るという
理解で良いですか?
>>680 さんの言うようにSetWindowLongPtrなど
は一切忘れて良いという理解で。
OK
型推測のautoもあんま見ないな メリットがよくわからん
しかし、SetWindowSubclassのサポートはXP以降だから「どんな場合でも」ではないな まぁそこまでの前方互換性は切ることを勧めるけど
「上位互換」と「下位互換」ですらどっちがどっちか分からなくなるのに「前方互換」とかあるのかよ もう嫌だ
後方互換と上位互換は簡単だ 後方互換は、時系列で新しく出た製品が、古い製品の機能をカバーしていること 上位互換は、上位の製品が下位の製品の機能をカバーしていること 問題は前方互換と下位互換 前方互換は、多くの説明を見る限り、 新しく出たデータフォーマットなどが古いシステムでも読み込めるなどの場合だな。 これは例えば、既存の古いフォーマットに新しいオプションをつけたフォーマットなどが相当するかと。→ビットマップ構造体など。 旧システムは古いフォーマット部分だけを読み込むので追加されたフォーマット部分の機能は使えないが限定的に読み込むことは可能。 新しい製品が古いデータフォーマットで保存することが出来る、なんてのも前方互換らしいけど。 古い製品で保存→新しい製品で開く ==> 後方互換 新しい製品で保存→古い製品で開く ==> 前方互換 下位互換も前方互換とほぼほぼ似たようなものだろう。 ライト版で保存→プロ版で開く ==> 上位互換 プロ版で保存→ライト版で開く ==> 下位互換 ただし前方・下位互換は一部機能が制限されている場合もあるということだ。
ソフトウェアとOSの関係。
あるソフトウェアがあるOSをターゲットに作られた場合、
古いOSで新しいソフトウェアを動かせる。
新しいOSのAPIを利用して作られている。
既存の(古くからある)API部分は動くが、新規に追加されたAP部分は利用できない。
==> 前方互換
新しいOSで古いソフトウェアが動く。
これは新しいOSのAPIが古いOSのAPIと同じ動きをすること。
もしくは新しいOSとしては不要だが、廃止せずに残していること。
古いAPIで廃止されたものがあると動かない。
MSは互換性維持のため、古いAPIを残している場合がある。
==> 後方互換
>>692 は新しいOS(XP以降)のAPIを利用して作ることで
古いOSで動かなくなるということになり前方互換性が無くなる、ということだ。
互換互換って未来永劫同じコードを使いまわしたいってことかよ
win32api 自体が‥winFX はどうなった?
>>696 ユーザ的にはそのほうが楽。
けど。
新しいOSが出ても古いソフトウェアを使い続けられると困ります。
新しいソフトウェアが出ても古いOSを使い続けられると困ります。
MSはサポートの終了という形で新しいOSを売り込める。
ソフト屋さんは新しいOS対応という形で新しいソフトを売り込める。
Win-Winやね、Windowsだけにw
>>571 ありがとうございます。
教えてもらった方法も検討してみます。
その後、またいろいろ試していて、
>>684 >サブクラス化が二重に起こる可能性があるならDefじゃない方
に関して疑問なのですが、これは
SetWindowLongPtrの方式でサブクラス化すると、
MyWndProc->DefWindowProc
のように呼び出すようになりますよね。
それをさらにMyWndProc2でサブクラス化すると、やり方によって、以下の二通りの場合が起こると
いうことでしょうか?
MyWndProc2->DefWindowProc (1) GetWindowLongPtrを使わない場合
MyWndProc2->MyWndProc->DefWindowProc (2) GetWindowLongPtrでやる場合
という理解で良いでしょうか?もしそうなら、同じ事を
SetWindowSubclass & DefSubclassProcの方式でやると、この(1)(2)のどっちになるのでしょうか?
そもそもサブクラス化に複数のやり方があるってより、SetWindowLongPtrが古くて穴があって非推奨。 それを解決したのがSetWindowSubclass。という話。 これ以上のテストは必要か?
>>700 もちろん(2)。そうでないと全部解決なんて言わない
>You do not need to call the default window procedure; this function calls it automatically.
他ウィンドウのサブクラス化のみならず、 thisをHWNDに結びつけるためだけにSetWindowSubclassを使ってもいい。 これを使うだけでGWLP_USERDATAもATL::CWindowもいらない。
CComPtr<IStream> strm = SHCreateMemStream(buf, length); これで参照カウント2になってスコープ抜けても解放されないのって罠すぎじゃない?
>>704 SHCreateMemStreamは明らかにMSが公開する気がなかったAPIだからしゃーない。
普通ならHRESULTとIStream**で返すはずだしな。
おとなしくAttachしとけ。
サブクラス化でまだ悪戦苦闘しているのですが、
RemoveWindowSubclassをする場合は、
http://eternalwindows.jp/control/controlbase/controlbase06.html の例を参考に
case WM_DESTROY:
RemoveWindowSubclass(hWnd, SubclassProc, 1);
PostQuitMessage(0);
return 0;
としたのですが、Debugモードでステップ実行したらPostQuitMessageしたあたりで例外が出てしまいます。
ステップではなくて普通に実行したら問題なく終わります。このサンプルの方法は良くないのでしょうか?
EternalWindowsさんのHPは情報が多くていつも頼りにしているのですが。
>>706 WM_CLOSEのタイミングでRemoveWindowSubclassやってみて
え?WM_NCDESTROYじゃないの?
WM_CREATEのタイミングでShowWindowとか色々やろうとして失敗するのは誰もが通る道だよな
そもそもこれから破棄されるのにわざわざサブクラス解除する必要はあるのかね? 解除後も生存するならともかく、作法としてはいきすぎな気がする。
そもそもこれからプログラム終了するのにわざわざメモリ解放する必要はあるのかね?
Windowsのメモリ管理はザルだからアプリでちゃんと解放しといた方が安心
w8.1 の OS レベルのメモリリークは本当にひどい なんなのこれ
714 :
560 :2015/03/09(月) 12:52:48.05 ID:R+XoG9o+
開いてるウィンドウのメニューのプルダウンが全部出て来なくなった タスクバーで右クリックしても何も出て来なくなった しばらくしたらタスクバーが消えたので エクスプローラー全部(シェルになってる分も)再起動したけど 結局右クリックするとまた何も出なくてしばらくするとタスクバーが消える
512MBのメモリでVistaを動かしてたときはよくコンテキストメニューが表示されなくなったわ
もれも 8GB の w8.1 で目にするとは思わんかった
>>709 PostMessageでWM_USERにぶん投げたらどうかな?
こんなのだけど有りかな?
case WM_CREATE:
PostMessage(hWnd,WM_USER,0,0);
break;
case WM_USER:
ShowWindow(hWnd,TRUE);
break;
>>718 switch文で完結する野暮用ならそれも有りだな
タスクバンド関連の基礎で質問。
http://eternalwindows.jp/shell/shellex/code/shellex13.html のページでは、タスクバンドに文字列を出すという例があるのだけれども、
文字列ではなく、画像を出したいのだけれども、
どうもどうやっても上手くいかない。
case WM_PAINT:
の中や、WM_CREATE, WM_DESTROY等を加えて、
「通常のフォーム系のウィンドウ」と同じような記述をしても、
全く描画がされないのだけれども、なぜでしょう。
デスクバンドならでわの何か制限があります?
こうすれば画像が出るよ! という例があればありがたいです。
画像ボタンでもOKです。
ちょっと教えてください。 DrawTextでテキストを描画するんですが、 ピッタリ収まる領域の高さ、というか 行数を事前に知る方法はありますか?
723 :
722 :2015/03/11(水) 00:10:01.29 ID:1/cfAzG2
ちゃんと読んでませんでした。 DT_CALCRECTですね。
DT軽くレクチャー
山田君、 ID:1djAj2boの家の座布団全部持って行きなさい
ボタンをクリックしてもそのウィンドウがアクティブにならないようにしたくて、 サブクラス化してWM_MOUSEACTIVEの戻り値をMA_NOACTIVATEに指定してみたんですが変わりありませんでした ボタンの配置されているウィンドウでも同じことをしていますがこっちは上手くいきました たぶん望みの挙動は.NETでいうところのControlStyles.Selectable==falseだと思うのですが、 Win32APIではどのように実装するんですか?
ワシが仮想キーボード作ったときは、WM_MOUSEACTIVEでMA_NOACTIVATEANDEATを返したが。
>>727 MA_NOACTIVATEANDEATも試したんですが、アクティブにはならないもののプッシュもできなくなるんですよね
マウスホバーのアニメーション以外は何も起こらない感じです
ああ、そうだよ。 WM_MOUSEACTIVEではWindowFromPointで実際にどのボタンが押されたのかを調べ、 ボタンを凹ませる処理から自分でする。 リピートとか全て自分で実装。
>>729 なるほど、そこからやればいいんですね
BM_SETSTATEで凹凸が表現できました。これならできそうです
ありがとうございました
APIのMouse Wheelイベントを捕らえて ゆっくり回したときはヌルヌル、 速く回したときはサクッとスクロールして 惰性でさらにスクロールする スマホアプリみたいな挙動を実現できます? そもそもDeltaって何?
OK
そういう風なコードを書いてあげればそういう風になる。
734 :
デフォルトの名無しさん :2015/03/11(水) 19:31:02.76 ID:GG+mbF6g
>>731 できようができまいがお前には関係ないだろ
馬鹿にはどのみち無理
735 :
デフォルトの名無しさん :2015/03/11(水) 19:34:10.40 ID:GG+mbF6g
>>731 みたいなゴミカスが実装したところで
今度は滑らかにスクロールしないと言い出して
ここでまたゴミみたいな質問を投下するのは目に見えてる
迷惑
できないと言っておくのがゴミの
>>731 にとっても回答者にとって幸せ
WM_MOUSEWHEELで出来る。 deltaは差分(difference)を表すギリシャ文字。
>>736 ありがとう。
調べたところ、hParamをWHEEL_DELTA(120)で割ると
回転速度が分かるという記述もあったんですが、
試した結果、本当にそうかなと思ったもんで...
実は先週末から思い立って自分専用の2chブラウザを作ってて
(datではなく)htmlからの読み込みや投稿の部分の実装は終わったんですが
再整形したhtmlをWebBrowserで表示してたものの、これがメモリ喰いで
自前の描画エンジンを作ろうとしてるところです
>>737 「Win32 自作コントロール」で検索。
APIを使わない2ちゃんねるスクレイピングは
違法になったのでは?
>>738 違法ではない、勝手にやるぶんには問題ない