Win32API質問箱 Build118
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2014/08/03(日) 04:02:03.38ID:T59meZIw■過去スレ
Win32API質問箱 Build117
http://peace.2ch.net/test/read.cgi/tech/1394156278/
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
0153デフォルトの名無しさん
2014/08/22(金) 23:07:40.90ID:U/01L7g80154デフォルトの名無しさん
2014/08/23(土) 17:55:05.03ID:3EDi1e2FMSDNのGetStockObjectのページには
日本語版:DeleteObject 関数を呼び出してストックオブジェクトを削除する必要はありません(削除しても問題はありません)。
英語版 :It is not necessary (but it is not harmful) to delete stock objects by calling DeleteObject.
とあるけど、色々なウェブサイトには削除してはいけないと書いてある
普通ならMSDNを信用すべきだと思うけど削除してはいけないと書いてある所が多くて不安になってきた
0155デフォルトの名無しさん
2014/08/23(土) 18:14:28.17ID:rS5gMmQG0156デフォルトの名無しさん
2014/08/23(土) 18:30:09.16ID:q/+BPTqG0157デフォルトの名無しさん
2014/08/23(土) 18:34:29.46ID:q/+BPTqG0158デフォルトの名無しさん
2014/08/23(土) 18:43:43.09ID:ZWPa2xFIする必要のないことをするのするのもおかしい
したらいけないもんだと覚えておいても問題ない
0159デフォルトの名無しさん
2014/08/23(土) 19:07:21.62ID:jh8yRGUv> 色々なウェブサイトには削除してはいけないと書いてある
これに対して疑問を抱くべき
なぜ削除してはいけないのか、と
0160デフォルトの名無しさん
2014/08/23(土) 19:08:35.67ID:3EDi1e2FストックオブジェクトなのかCreateで作ったものなのか分からないGDIオブジェクトの後始末をしたい時に
DeleteObjectにそのまま入れるべきか、それともまずストックオブジェクトか否かを判別すべきかというケースだった
大人しくストックオブジェクトの代わりに同じ内容のGDIオブジェクトをCreateすることにして一律でDeleteObjectすることにするよ
0161デフォルトの名無しさん
2014/08/23(土) 19:28:21.46ID:ZWPa2xFIGDIオブジェクト扱う基底クラスではDeleteObject、Stockオブジェクトを扱うサブクラスではNOPにすれば
それかStockオブジェクトはクリーンアップ用リストに登録しないとか
0162デフォルトの名無しさん
2014/08/23(土) 19:39:58.43ID:q/+BPTqG0163デフォルトの名無しさん
2014/08/23(土) 21:18:34.30ID:ATeOZN340164デフォルトの名無しさん
2014/08/23(土) 22:17:21.50ID:JJDGD5m10165デフォルトの名無しさん
2014/08/23(土) 23:12:03.95ID:q/+BPTqG未だに古臭いコードでオナニーなんて
0166デフォルトの名無しさん
2014/08/24(日) 07:48:58.53ID:js+i7Duschar cmd[] = "netsh routing ip add filter \"ローカル エリア接続 2\" input 192.168.2.2 255.255.255.255 192.168.1.1 255.255.255.255 tcp 0 22";
PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdOutput = hOutputWrite;
si.hStdInput = hInputRead;
si.hStdError = hErrorWrite;
CreateProcess(NULL, cmd, NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
エラー処理は省略しましたが実際のプログラムでは書いています
RRASはインストールしてサービスも起動しています
コマンドプロンプトを立ち上げて手でコマンド打ったときは正常動作
(OKと表示される)しています
XPや2003serverのときは正常動作していたのですが
2008serverだと実行結果が
次のコマンドは見つかりませんでした: routing ip add filter "ローカル エリア接続 2" input 192.168.2.2 255.255.255.255 192.168.1.1 255.255.255.255 tcp 0 22
と netsh を除いた残りの文字列だけが表示されます
cmd 文字列の先頭に
cmd /c
を付け加えても同じ結果でした
何が問題?
0167デフォルトの名無しさん
2014/08/24(日) 08:03:18.61ID:js+i7Dushttp://stackoverflow.com/questions/8166840/got-the-system-cannot-find-the-file-specified-when-i-run-netsh-from-createproc
ここ見て思ったのは
Win32APIのCreateProcessからnetshを呼ぶと32bit版のnetshが呼ばれて
コマンドプロンプトから手打ちだと64bit版のnetshが呼ばれてて
RRASがインストールされたのは64bit版の方だけとかいうオチかな
CreateProcessで64bit版のnetshを呼ぶ方向で試してみます
0168デフォルトの名無しさん
2014/08/24(日) 08:16:49.57ID:js+i7Dusで置き換えてみたけど結果変わらんな
なんなのこれ
0169デフォルトの名無しさん
2014/08/24(日) 08:24:00.60ID:js+i7DusThere are lots of parameters to CreateProcess.
Unless you actually make the effort to show us
what they are we simply have to guess at what you have done wrong.
Why are you passing an environment? How did you initialise si?
What is WindRoot? What is CommandLine?
By far the best would be to supply a complete console app
in the form of a single .dpr file that reproduced your problem.
Once you do that I guarantee we'll be able to fix your problem in double quick time. ?
David Heffernan Nov 18 '11 at 11:07
ああこういうことか
精進が足りんな
もちょっと勉強してくる
0170デフォルトの名無しさん
2014/08/24(日) 08:24:58.36ID:ZJV6C+Ys0171デフォルトの名無しさん
2014/08/24(日) 08:53:40.85ID:js+i7Dusこれでも同じエラーだった
たぶん>>170
0172デフォルトの名無しさん
2014/08/24(日) 09:01:07.65ID:js+i7DusCreateProcessで作ったプロセスが勝手に違うアカウントで実行されてる?
0173デフォルトの名無しさん
2014/08/24(日) 09:06:50.34ID:ZJV6C+YsCreateProcessでは昇格は無理
0174デフォルトの名無しさん
2014/08/24(日) 09:44:40.66ID:js+i7DusShellExecute(NULL, "open", "C:\\Windows\\SysWOW64\\netsh.exe", "routing ip (略)", "C:\\Temp", SW_SHOWNORMAL);
戻り値は2Aで32(10進)よりも大きい値なので成功していると思われるのですが
フィルタは有効になっていませんでしたので結局うまくいっていません
0175デフォルトの名無しさん
2014/08/24(日) 09:57:20.71ID:js+i7Dusしばらく休みます
おやすみなさい
0176デフォルトの名無しさん
2014/08/24(日) 10:13:54.69ID:ZJV6C+Ys昇格の場合openじゃなくてrunas
0177デフォルトの名無しさん
2014/08/24(日) 11:28:21.53ID:js+i7Dusnetsh add helper ipmontr.dll
のコマンドを試してみたら
次のヘルパー DLL を読み込めません: IPMONTR.DLL
というエラーが表示された
CreateProcess で起動するとパスが通ってないとかそんなんだろうか?
2003 でうまくいってたのになぁ
UAC かなぁ
>>176
ありがとう
これから試します
0178デフォルトの名無しさん
2014/08/24(日) 11:53:39.63ID:js+i7Dus戻り値は2A
結果はフィルタ設定追加されず
0179デフォルトの名無しさん
2014/08/24(日) 12:19:12.18ID:gxl9aRfRつーかC:\Windows\SysWOW64\*.exeって32bitバイナリだけどいいの?
0180デフォルトの名無しさん
2014/08/24(日) 12:28:52.67ID:ZJV6C+Yscmd[] = "略";
の所を
cmd[256] = "略"
にしてCreateProcessしたらどうなる?
後はビルドエラー出ると思うけど一応
CreateProcessAが呼ばれてるのかCreateProcessWが呼ばれてるのか確認
0181デフォルトの名無しさん
2014/08/24(日) 12:41:36.11ID:EYMdVqe7片対数グラフで直線だから既に指数関数的増加だった
2014年に、西アフリカでアウトブレイクした潜伏期間延長型エボラの死者は、2014年8月半ばで1000人。←今ココ
2014年12月上旬で1万人。
この時点で世界規模で空路シャットダウン開始、世界経済大混乱
2015年5月で10万人。
2015年9月で100万人。
この時点で、第二次世界大恐慌発生
2015年大晦日で1000万人。
ちなみに
http://ja.wikipedia.org/wiki/2014%E5%B9%B4%E3%81%AE%E8%A5%BF%E3%82%A2%E3%83%95%E3%83%AA%E3%82%AB%E3%82%A8%E3%83%9C%E3%83%A9%E5%A4%A7%E6%B5%81%E8%A1%8C
:カナダ保健省のサイトでは体内に数個のエボラウィルスエアロゾルが侵入しただけでも発症するとしている
:ハマダラカが、吸血したての人の新鮮血を媒介しているという学説が浮上している
エボラ出血熱は蚊やアブに刺されただけで感染する。
:「この地域には内戦、政府による搾取、テロが長い間続いており、それによって生まれた恐怖、貧困、猜疑心などがある。エボラは耐え難い騒音に付け加えられた一つのざわめきに過ぎない」
現地では
や る 気 は 皆 無
0182デフォルトの名無しさん
2014/08/24(日) 12:44:17.38ID:js+i7Dusした結果と手動でコマンドラインでsetしたときの結果が違う・・・
前者はPROCESSOR_ARCHITECTURE=x86とか
ProgramFiles=C:\Program Files (x86)
後者はPROCESSOR_ARCHITECTURE=AMD64とか
ProgramFiles=C:\Program Files
なのでUACの問題というより64bitの環境のnetshが呼べてない気がします
0183デフォルトの名無しさん
2014/08/24(日) 13:31:03.00ID:js+i7DusNetSh
と
WOW6432Node\Netsh
があって
前者にはipmontr.dllが入ってて
後者には入ってない
ここに無理やりipmontr.dllのデータを作れば動くかも知れないけど
やってもいいのかなぁ
0184デフォルトの名無しさん
2014/08/24(日) 13:33:06.03ID:js+i7Dus前者が
HKLM\Software\Microsoft\NetSh
後者が
HKLM\Software\WOW6432Node\Microsoft\NetSh
です
0185デフォルトの名無しさん
2014/08/24(日) 13:51:05.29ID:js+i7Dushttp://www.kmonos.net/lib/bww.ja.html
こんなのが出てきたけどこれを入れればいいのかな
0186デフォルトの名無しさん
2014/08/24(日) 14:13:26.08ID:js+i7Dusどうしても32bitの方が呼ばれてしまう><
0187デフォルトの名無しさん
2014/08/24(日) 14:16:55.90ID:ZJV6C+Ys指定してるcmdのpathが32bit
0188デフォルトの名無しさん
2014/08/24(日) 14:43:19.45ID:pFdg0X5d0189デフォルトの名無しさん
2014/08/24(日) 14:43:21.86ID:jlCuRdJh0190デフォルトの名無しさん
2014/08/24(日) 14:52:17.09ID:nsbGoTTZ0191デフォルトの名無しさん
2014/08/24(日) 14:56:38.20ID:jlCuRdJh時代はC#
0192デフォルトの名無しさん
2014/08/24(日) 15:25:54.96ID:jFkpkhSs0193デフォルトの名無しさん
2014/08/24(日) 15:36:21.55ID:gxl9aRfR0194デフォルトの名無しさん
2014/08/24(日) 15:37:56.27ID:jlCuRdJh0195デフォルトの名無しさん
2014/08/24(日) 15:41:21.99ID:jFkpkhSsMSDNを見たって項目分けられているわけだし
0196デフォルトの名無しさん
2014/08/24(日) 16:31:39.91ID:qBw4gxKhプログラムからGetUserNameを使うと、管理者のユーザー名が取れるのですが、
実行した標準ユーザーの名前を取りたいと思っています。
LsaGetLogonSessionDataとかも使ってみたのですが、
やはり管理者のユーザー名しか取れません。
なにか別の方法があるでしょうか?
0197デフォルトの名無しさん
2014/08/24(日) 19:09:15.36ID:jlCuRdJh0198デフォルトの名無しさん
2014/08/24(日) 19:18:43.96ID:jlCuRdJh繰り返すwin32apiは時代遅れ
0199デフォルトの名無しさん
2014/08/24(日) 19:20:27.03ID:js+i7Dusありがとうございます
それで上手く行きました
結局 ShellExecute もアカウントの昇格も関係なくて CreateProcess でも上手く行ったのですが
とりあえず
*cmd = "C:\\Windows\\Sysnative\\cmd.exe /c C:\\Windows\\Sysnative\\netsh.exe routing ip (略)";
としたところ
前半の Sysnative\cmd.exe の方で 64bit 化された状態で
Sysnative\netsh.exe を参照することになるので
「指定したパスが見つかりません」と出て失敗しました
なので
*cmd = "C:\\Windows\\Sysnative\\cmd.exe /c C:\\Windows\\System32\\netsh.exe routing ip (略)";
とするか
単に
*cmd = "C:\\Windows\\Sysnative\\netsh.exe routing ip (略)";
とするのが良いようです
以上ご報告です
みんなオラに力を分けてくれてありがとう
0200デフォルトの名無しさん
2014/08/24(日) 19:43:42.15ID:js+i7Dusexplorerに問い合わせると良いらしいです
http://eternalwindows.jp/security/securitycontext/securitycontext09.html
0201デフォルトの名無しさん
2014/08/24(日) 20:03:45.13ID:jlCuRdJh0202デフォルトの名無しさん
2014/08/24(日) 20:58:52.96ID:fKVcBBaCお前もおっさんだろうに。
0203デフォルトの名無しさん
2014/08/24(日) 21:07:43.49ID:jWy1bnP0やめといた方がいいと思うな
0204デフォルトの名無しさん
2014/08/24(日) 21:28:31.05ID:jlCuRdJh0205デフォルトの名無しさん
2014/08/24(日) 22:43:14.74ID:7trTXQ640206デフォルトの名無しさん
2014/08/25(月) 02:56:42.53ID:5aaZ0ZHFhttp://hissi.org/read.php/tech/20140824/amxDdVJkSmg.html
堂々たる第一位
0207デフォルトの名無しさん
2014/08/25(月) 07:42:02.50ID:LIV+GZ8D0208デフォルトの名無しさん
2014/08/25(月) 11:30:04.01ID:FJ9UQc5QおいQZこんなスレまで出張かよ
コテつけてなくてもバレバレなんだな^^
0209デフォルトの名無しさん
2014/08/25(月) 11:42:32.63ID:8Sw0Q1jq馬鹿なの
0210デフォルトの名無しさん
2014/08/25(月) 15:07:53.34ID:LIV+GZ8D0211デフォルトの名無しさん
2014/08/25(月) 21:27:24.51ID:ZcBnU/FEありがとうございます!
GetShellWindowとOpenProcessTokenを使ったら取れました。
0212デフォルトの名無しさん
2014/08/25(月) 22:15:31.86ID:FJ9UQc5Q0213デフォルトの名無しさん
2014/08/26(火) 11:43:25.59ID:KvwdZ1Dnウィンドウ内に1万個の部品を載せてみると、プログラムは異常な動きをします。
メモリーが破壊されデバッガで追えない状態になるのです。
ちょうど、GDIオブジェクトを1万個作った時のようになります。
思い当たる節は、次のウィンドウ・メッセージを読み取る前にInvalidateRect()を
あるいはWM_PAINTの中でSetViewport()を1万回呼ぶことですが、これはまずいのですか?
それともう一つ、GUIに一万個の部品が載ることは実際の利用状況で有り得ますか?
0214デフォルトの名無しさん
2014/08/26(火) 12:07:41.71ID:HrT/idVN0215デフォルトの名無しさん
2014/08/26(火) 13:43:23.77ID:9P+s8oWH人間に一万個の部品を認識させるUIとは?
0216デフォルトの名無しさん
2014/08/26(火) 13:43:24.78ID:hvry/qaFごみおっさんの懐古コードを希望したいんですね
0217デフォルトの名無しさん
2014/08/26(火) 13:44:13.13ID:9ST+88q4IDを赤くする日課、さぼんなよ。
0218デフォルトの名無しさん
2014/08/26(火) 13:54:04.39ID:KvwdZ1Dnたぶん、マインスイーパーとか、音楽関係のソフトとかですかね。
0219デフォルトの名無しさん
2014/08/26(火) 14:02:07.54ID:8jv5EL7T0220デフォルトの名無しさん
2014/08/26(火) 14:07:06.31ID:KvwdZ1DnソースはGitHubにあって誰でも見れるのですが、名前や連絡先が入っているので、
荒れているスレに出すのはどうしたものかって感じなんですよね。
明らかにプロの人が居るので、見てほしい気持ちはあるんですが。
それと同じ数の狂人もいるじゃないですか。
0221デフォルトの名無しさん
2014/08/26(火) 14:09:16.67ID:46MkRGQY0222デフォルトの名無しさん
2014/08/26(火) 14:13:53.19ID:KvwdZ1DnNuGetとかみんな使っていないみたいだけど、これ世界が変わるくらい良いものですよ。
CoAppが尻切れトンボにならないように、C++でもどんどん使ったらいいんじゃないかと思います。
GitHubに接続すると、プロジェクトやソリューションの共有が楽にできるんじゃないかと思います。
一人でこつこつ勉強しながらやっているので、まだ試せていないんですが。
0223デフォルトの名無しさん
2014/08/26(火) 14:18:19.05ID:m1Q2Zmzfx64とx86とでは、構造体のメンバ位置も、サイズも変わってしまうんだな・・・・
うかつだった。
0224デフォルトの名無しさん
2014/08/26(火) 14:18:53.11ID:KvwdZ1Dn2CHで質問するときは、ideoneを良く使っているんですけど、コード量が多くなりすぎちゃって
ちょっと無理です。
あんど
APIの呼び出し回数は関係なかったみたいです。
100万回呼んでも遅くなるだけで普通に処理できました。
ちょうどGDIオブジェクトの限界と数が同じくらいだったので、疑ってしまいました。
単純に、スタックの使いすぎでした。
ダイエットします。
0225デフォルトの名無しさん
2014/08/26(火) 14:28:42.42ID:hvry/qaF臭すぎ
0226デフォルトの名無しさん
2014/08/26(火) 14:31:14.27ID:hvry/qaFこれだから古い技術に固執する馬鹿は
0227デフォルトの名無しさん
2014/08/26(火) 14:45:21.45ID:9P+s8oWHたぶんってなんだよー。まあ解決したならよかったね。
一万個も部品があるなら人間も扱いきれないだろうから、GUIって言うほどの
機能を持たせずゲーム的な作り方の方がいいんじゃないかと思ってた。
0228デフォルトの名無しさん
2014/08/26(火) 14:59:46.12ID:hvry/qaF0229デフォルトの名無しさん
2014/08/26(火) 17:42:29.12ID:mLMy21sdGDIリソース足りないんじゃね?コントロール減らせ。
>>218
マインスイーパは複数のボタンコントロールじゃなくて単一のクライアント領域だったり。
0230デフォルトの名無しさん
2014/08/26(火) 18:02:23.12ID:hvry/qaF0231デフォルトの名無しさん
2014/08/26(火) 22:32:31.52ID:8iORGEbW♀
0232デフォルトの名無しさん
2014/08/26(火) 22:52:40.88ID:M/DKQ9Ao0233デフォルトの名無しさん
2014/08/26(火) 23:36:56.69ID:pwR8Qra80234デフォルトの名無しさん
2014/08/26(火) 23:44:19.23ID:AKSJinfOWin32APIの代わりって何があるん?
.NET Frameworkだけじゃ出来ることに限界があるし
新しいAPIのセットとかがあるん?Win64APIとか?
0235デフォルトの名無しさん
2014/08/27(水) 00:14:34.68ID:sWLZW0suhttp://www.atmarkit.co.jp/fdotnet/chushin/win8appdev_01/win8appdev_01_01.html
0236デフォルトの名無しさん
2014/08/27(水) 01:01:26.18ID:pYhzyHuf0237デフォルトの名無しさん
2014/08/27(水) 01:23:58.40ID:D1kHPcdG0238デフォルトの名無しさん
2014/08/27(水) 03:19:01.30ID:6l9mfgq+この板に常駐してるC#しかできないおっさんの言うことだから気にするな
この板の書き込み上位はいつもこのおっさん
0239デフォルトの名無しさん
2014/08/27(水) 04:54:40.32ID:fBBDR2vO.NETに移行する意味がほとんど無い
元々WinAPIやC++,C#ですら使用頻度低くて
デスクトップアプリも作る予定無いのに
CUIベースなら.NETよりもLL使ったほうが全然良い
そうなるとCUIベースのプログラムで、かつOS依存のAPI呼び出しが必要な時にLLから呼び出すだけ
WinAPIか.NETっつったら殆どWinAPI使うけど、そもそもどちらも俺にとっては使用頻度が低い
0240デフォルトの名無しさん
2014/08/27(水) 06:38:59.38ID:coh19+fw0241デフォルトの名無しさん
2014/08/27(水) 13:37:35.72ID:pYhzyHufわざわざwin32apiで叩いてきんもいプログラム作るなよ
C#で効率的なプログラミングを
0242デフォルトの名無しさん
2014/08/27(水) 18:01:55.16ID:WVBb8eJHhttp://blogs.msdn.com/b/windowssdk/archive/2009/06/12/windows-api-code-pack-for-microsoft-net-framework.aspx
これもう無いのか
0243デフォルトの名無しさん
2014/08/27(水) 18:54:57.76ID:9wQXWUSlパッケージマネージャに縁のない人達
0244デフォルトの名無しさん
2014/08/27(水) 20:29:09.88ID:pYhzyHuf0245デフォルトの名無しさん
2014/08/27(水) 21:58:27.07ID:RqytrRPt0246デフォルトの名無しさん
2014/08/28(木) 15:04:34.95ID:jOgRJ1W30247デフォルトの名無しさん
2014/08/28(木) 15:06:15.54ID:0SG1ihpu0248デフォルトの名無しさん
2014/08/29(金) 07:42:42.57ID:ZQUCiV5Vウイルス入ってる心配無いの?
0249デフォルトの名無しさん
2014/08/29(金) 08:13:31.41ID:n0j14V440250デフォルトの名無しさん
2014/08/29(金) 13:24:55.53ID:yVhE6NGy0251デフォルトの名無しさん
2014/08/29(金) 15:20:35.88ID:78rTFaRl0252デフォルトの名無しさん
2014/08/29(金) 19:52:18.10ID:TWxk4Cnt■ このスレッドは過去ログ倉庫に格納されています