X



Win32API質問箱 Build127

0200デフォルトの名無しさん
垢版 |
2022/03/27(日) 01:02:38.66ID:nCDHmZcB
>>197
>念のため補足すると、プロセスというのはスレッドの集合であり。

全然説明になってませんよ…
次の質問にちゃんと答えられますか?
「プロレスごとに固有に持つ値はなにでしょうか、最重要な二つ答えなさい」
0203デフォルトの名無しさん
垢版 |
2022/03/27(日) 01:12:55.86ID:yS8KpDml
>>200
スタン・ハンセンとハルク・ホーガンかなあ。
プロレスについては詳しくないので、プロレススレで
0204デフォルトの名無しさん
垢版 |
2022/03/27(日) 04:28:08.59ID:yA+QVyZU
1プロセス内に、複数のスレッドを起動できる。
1対多の関係

それら同一プロセス内の複数のスレッドを調停するのが、critical section じゃないの?
0205デフォルトの名無しさん
垢版 |
2022/03/27(日) 04:33:51.34ID:aGS6McBI
>>204
まちがってはいないがアバウトすぎる…
スレッド固有のデータは何?
スレッドで共有するデータは何?
0207デフォルトの名無しさん
垢版 |
2022/03/27(日) 06:51:08.16ID:nbMAc3Vl
実は「ウィー!」と言ってなかった スタン・ハンセン雄たけびの真相: J-CAST ニュース
https://www.j-cast.com/2015/10/08247400.html?p=all
2015年10月08日18時42分


🤘ウィー!
0208sage
垢版 |
2022/03/27(日) 07:55:58.79ID:wX3DpwsS
ちと出遅れたが
WinMainの第3引数は LPSTR
UNICODE版はスレチ
0214デフォルトの名無しさん
垢版 |
2022/04/05(火) 10:57:12.74ID:PKvr+8WT
現在プリンタ選択ダイアログを自作していて、質問があります。
印刷コモンダイアログに表示されているプリンタ名はEnumPrintersで取得できたのですが、アイコンを取得する方法がわかりません。
どうすればアイコンを取得できますか?
0219デフォルトの名無しさん
垢版 |
2022/04/07(木) 19:12:44.04ID:mVtcUlDy
ウィンドウのリサイズイベント(WM_SIZE、WM_SIZING等)が来た時、ユーザーが直接そのウィンドウに対してリサイズを行ったのか、
ディスプレイ解像度等が変わり、システムの都合で結果的に変わったのかを判定したいと考えています。
ディスプレイ設定が変わった場合はWM_DISPLAYCHANGE等で判るので、
ユーザーが能動的にウィンドウをリサイズしたかどうかの判定ができればよいと思うのですが、
何か良い判定方法はあるでしょうか。
0221デフォルトの名無しさん
垢版 |
2022/04/07(木) 22:02:00.24ID:mVtcUlDy
>>220
よさげなメッセージがあったんですね!
ありがとうございます!
0222デフォルトの名無しさん
垢版 |
2022/04/07(木) 22:34:26.91ID:mVtcUlDy
https://stackoverflow.com/questions/1826165/wm-entersizemove-wm-exitsizemove-when-using-menu-not-always-paired
ここによると、WM_ENTERSIZEMOVEが来てもリサイズや移動がキャンセルされるとWM_EXITSIZEMOVEが来ない場合があるようで、
その場合でもWM_ENTERSIZEMOVE中のWM_CAPTURECHANGEDで終了が判定できるとのことです。
たしかにタイトルバーからサイズや移動をキャンセルするとそのような動きでした。
これで解決しそうです。ありがとうございました。
0225デフォルトの名無しさん
垢版 |
2022/04/08(金) 15:18:23.25ID:ZELibu1M
スケーリング変更で実質解像度が変わった場合もWM_ENTERなんちゃらが来るね
WM_DISPLAYCHANGEも来るから区別は付くかな
0226デフォルトの名無しさん
垢版 |
2022/04/09(土) 22:15:49.34ID:d9RaMPBt
画面端の四隅に独自スナップはやったなあ
吸い付くと気持ちいいのよね
0227デフォルトの名無しさん
垢版 |
2022/04/09(土) 22:35:18.94ID:unOoTfDz
osの画面の位置設定が、吸いつくくせにぴったり揃わず微妙にずれる
ふざけた動作だったな
0228デフォルトの名無しさん
垢版 |
2022/04/10(日) 09:07:01.55ID:67K4hItk
windows10になってから
座標を0,0にしても少し隙間が空くようになったのもふざけてる
0230デフォルトの名無しさん
垢版 |
2022/04/10(日) 12:00:36.82ID:qE10hPc2
最低限必要な処理性能を引き上げることで
グラフィックボードやPCの買い替えを促進することができました。
0231デフォルトの名無しさん
垢版 |
2022/04/10(日) 13:17:17.03ID:wqaUV7TG
実際AVX2未満だと256bit命令でまともな事ほとんどできないからHaswell未満切り捨てたくなる気持ちは分かる
0232デフォルトの名無しさん
垢版 |
2022/05/10(火) 16:03:53.83ID:Asxcv1id
MSゴシックなどのフォントで、DrawTextで右寄せ(DT_RIGHT)の文字列を描くと、
イタリック体のときに右が欠けてしまうのですが、こんな仕様なのでしょうか?
0234デフォルトの名無しさん
垢版 |
2022/05/12(木) 23:26:02.37ID:zDTh1Mrl
>>232
日本語のことなど真剣に考えてませんから
0239デフォルトの名無しさん
垢版 |
2022/05/13(金) 15:33:38.71ID:ezCooE+T
そもそもMSゴシックを斜体にするのがダサいので、DrawTextとしても想定外という説
0241デフォルトの名無しさん
垢版 |
2022/05/13(金) 17:38:27.24ID:9J+8i6yQ
自力で右端を広げないといけないんですかね。
ただ、DT_WORDBREAKやDT_EDITCONTROLを付けて自動折り返しを設定していると、
どこで折り返されるかは事前に想定できないので、行末にスペースというのも難しそうです。
0243デフォルトの名無しさん
垢版 |
2022/05/20(金) 06:40:29.02ID:QdnN/13A
テンポラリのビットマップに描画して実測する関数作っとけば以後は気にせずに済む
0247デフォルトの名無しさん
垢版 |
2022/06/07(火) 13:41:20.24ID:IY5aTV4U
アスペクト比を固定したいため、ウィンドウの最大化を完全に無効にしたいのですが、フレームをダブルクリックしたり、Windowsキー + ↑での最大化を塞ぐにはどのように処理すればいいでしょうか?
0250デフォルトの名無しさん
垢版 |
2022/06/07(火) 14:39:30.72ID:IY5aTV4U
>>248
ありがとうございます!
一度やってみたのですが、うまくいかなかったので、やり方がよくなかったのかもしれません
Unityという特殊な環境が影響してるのかもしれないですが、、、
0251デフォルトの名無しさん
垢版 |
2022/06/07(火) 14:41:36.70ID:IY5aTV4U
>>249
後出しですみません
ドラッグでのサイズ変更は許可したいので、ウィンドウスタイルでは無理なのかなーと思ってます
今のところWM_SIZINGはうまく機能してるようです
0254デフォルトの名無しさん
垢版 |
2022/06/07(火) 15:31:44.87ID:OnF3qCRP
ちゃんと抜いてんならそれだけで自動的にシステムメニューも含めて
タイトルバーダブクリやWin+↑も無効化されるはずだがな
0256デフォルトの名無しさん
垢版 |
2022/06/07(火) 16:05:01.49ID:IY5aTV4U
>>255
ありがとうございます
ダブルクリックの方はこれで回避できるんですけど、Windowsキーの方がどうやっても防げなくて、、、
WM_WINDOWPOSCHANGING を拾えばいけるかなー
0258デフォルトの名無しさん
垢版 |
2022/06/07(火) 16:55:24.79ID:LNP3bNny
正確には、ってかそれじゃ最初からスナップによるリサイズを防ぎたいって全然違う質問じゃん
SYSCOMMAND監視して無理矢理引っぺがしたりはできるけど行儀悪すぎだから
任意のウィンドウサイズになってもボックスでレンダリングのアスペクト比維持した方がマシだな
0259デフォルトの名無しさん
垢版 |
2022/06/07(火) 17:24:17.68ID:HZXBW/m6
>>256
SPYでその時にどのメッセージ(多分複数)が来てるか調べて
どれを捨てる or 改変すれば望みの動作になるかを考えろ
0260デフォルトの名無しさん
垢版 |
2022/06/07(火) 21:10:34.66ID:TZU+Jbyx
最大化はダイアログのスタイルにして抑止するのが定石だけど誰も書かないので一応
C#のFormBorderStyle = FixedDialog の時のウィンドウスタイル=0x16c80000 拡張ウィンドウスタイル=0x00050101
これでスナップの影響も受けないし、その上でサイズ変更もやりたければできる。
許容しつつアス比を維持するのもいい。ゲームのフルスクリーンモードとかそんな感じだろうし
0261デフォルトの名無しさん
垢版 |
2022/07/03(日) 16:22:44.87ID:K2/9xttr
HINSTANCEかHWNDから、そのプロセスが貰っているコマンドラインオプションを知る方法ってある?
0263蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/07/03(日) 16:44:52.75ID:wwKaul6r
GetWindowThreadProcessId使えばHWNDからプロセスID (pid)が得られるはずだ。
0264デフォルトの名無しさん
垢版 |
2022/07/03(日) 17:40:46.92ID:K2/9xttr
>>262
thx
もう晩酌始めちまったんで
素面に戻ってからやってみるわ

お、飯が炊けた
酢飯と酢の物作んなきゃ
0265デフォルトの名無しさん
垢版 |
2022/07/13(水) 14:56:13.92ID:6WIGt+Xj
SetWindowPlacement, GetWindowPlacement を使ってウィンドウ位置の保存と復元をしています
マルチモニター環境でも当該モニターで表示されていたウィンドウ情報の保存と復元が Windows10 以前では行えていましたが、
Windows11 になってからは、マウス操作しているモニターで全てウィンドウが表示されてしまいます

これはプログラム側で何か修正が必要なのか、Windows11 上の設定(アプリのプロパティ?)が必要なのでしょうか?
Windows11 でマルチモニターの仕様が変わったというのは分かりますが、具体的にどのように対応すればいいのか分かりません

よろしくお願いします
0267デフォルトの名無しさん
垢版 |
2022/07/13(水) 15:53:47.47ID:LawUXVQN
標準の仮想デスクトップとかも追加されてるのでちゃんと動くのかよくわからんよな
0268デフォルトの名無しさん
垢版 |
2022/07/13(水) 17:22:23.86ID:6WIGt+Xj
>>266
構造体のゼロクリア、length メンバへの sizeof 設定は行っています
使用しているメンバは rcNormalPosition と showCmd のみです

>>267
Windows11 では、モニターのオンオフで狂ってしまったウィンドウ位置の復元を
するようになったという程度の知識しかありません(正しいかどうかも分かりません)が、
実機で色々テストするしかないかもですね(Windows11 にしたくない)
0269デフォルトの名無しさん
垢版 |
2022/07/14(木) 22:38:26.85ID:ztzbKaJ8
ベータ以前の11のことだからバグかもしれないのがな
11.1で完成するOSなんだろうな
0270デフォルトの名無しさん
垢版 |
2022/07/14(木) 23:19:01.63ID:je7st1fi
手元の開発環境を Windows11 & マルチモニターで揃えてテストしてみると問題は再現しませんでした
これは問題が発生した環境依存によるものの可能性が非常に高くなりました

お騒がせしましてすみませんでした
0271デフォルトの名無しさん
垢版 |
2022/07/22(金) 09:23:12.50ID:nl1lv8Ha
名前付きパイプで質問です。
Windows10(x64)で64ビットアプリ(サーバー)と32/64ビットアプリ(クライアント)でパイプ通信するのですが、クライアントが64ビットの場合は問題なし、32ビットの場合は動作したりしなかったっりで、サーバーのCreateNamedPipe関数のnMaxInstancesを1から255にしたら解消しました。
クライアントは1つだけなので1で良いと思ったのですが、何なんだろう?
0273デフォルトの名無しさん
垢版 |
2022/07/26(火) 18:26:55.94ID:fMGzaZG1
プログラ厶の最低限の文法わかってる人間が、WindowsAPIを使用したGUIプログラムを作りたい場合に、おすすめの本ってありませんか?

正直WindowsAPIのハンドルとかハンガリー記法とかで面食らってぶつかってます。
0274デフォルトの名無しさん
垢版 |
2022/07/26(火) 18:51:12.11ID:od2hcCSg
> WindowsAPIを使用したGUIプログラムを作りたい

そもそも止めとけ楽な道を進めと思うんだけど、なんで?

> おすすめの本

今時そんな本あるのか分からないけど、猫でもわかるシリーズのWEBサイトでいいんじゃないの
0275デフォルトの名無しさん
垢版 |
2022/07/26(火) 19:38:38.71ID:qDGm82dw
NT4.0や95の頃の書籍はメッセージやハンドル等丁寧な解説がされていたと思う
0278デフォルトの名無しさん
垢版 |
2022/07/27(水) 21:47:08.84ID:K/AxbL6V
>>274
今まで他の言語で楽をさせてもらってたのは、他の方のおかげだと気付いて、実際に自分も勉強したいという思いです。

>>275
まさにおっしゃる通りで、先日なんとか相馬 俊治さんという方の本を見つけました、古い本のほうがわかりやすいです。
0279デフォルトの名無しさん
垢版 |
2022/07/29(金) 10:07:57.73ID:utvRDsk1
C#でもWndProcとかに手を付けると結局Win32APIレベルのメッセージループの仕組みの知識が必要だし
C/C++でWin32APIだけ使ったメッセージループ検証用GUIアプリを用意しとくと捗るよ
0280デフォルトの名無しさん
垢版 |
2022/07/30(土) 02:15:20.39ID:pJ1A3nc7
C++でクラス化ラップ化する前のピュアなメッセージループをなら猫かな
そこから先は ラップしてるライブラリの方言が出てくるだろうし
0281デフォルトの名無しさん
垢版 |
2022/07/30(土) 12:31:23.06ID:YQlRXD6d
>>277
ありがとうございます!ツールももちろんですがこの作者のHP自体が非常に貴重ですね!

>>279
ありがとうございます!ラップしてしまうとWin32APIの挙動が見えなくなるので、生で見える環境を用意しておいたほうが良いようなイメージでしょうか?
0282デフォルトの名無しさん
垢版 |
2022/08/01(月) 14:57:50.07ID:ei01gCPD
>>277
RisohEditor良さそうやね
見た目レトロで良いからネイティブWin32で超軽量GUI作りたいってシーン結構あるから重宝しそうやわ
0283蟻人間 ◆T6xkBnTXz7B0
垢版 |
2022/08/01(月) 16:08:58.49ID:eMiJU5As
MsgCrackにWM_DESTROYを入力すると
void OnDestroy(void)
って出てくる。
これを#include <windowsx.h>のHANDLE_MSGマクロと一緒に使うと吉。
0288デフォルトの名無しさん
垢版 |
2022/08/01(月) 20:38:09.58ID:Z+HQWfkn
>>284

windowsx.hで定義されてるHANDLE_MSG()マクロを使えば
いちいちcase文を書く必要がない

switch (uMsg)
{
HANDLE_MSG(hwnd, WM_CREATE, OnCreate);
HANDLE_MSG(hwnd, WM_COMMAND, OnCommand);
...
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

使わないメッセージはスルーしていい
OnCreate()やOnCommand()のプロトタイプもwindowsx.hで定義されてるので引数を間違ったらエラーで教えてくれる
0289デフォルトの名無しさん
垢版 |
2022/08/02(火) 17:15:54.00ID:64Iv6nA4
#define BEGIN {
#define END }
に近い感じなので マクロにお任せってあまり好きではない(個人的感想)
0291デフォルトの名無しさん
垢版 |
2022/08/02(火) 22:59:22.62ID:clR4IgPX
こういうシステム的な部分を作るとき厄介なのが細かい引数間違えたりすることなのですべて定義されてるのは助かるよ
windowsx.hに入ってるってことはMS推奨なんだろうし
0292デフォルトの名無しさん
垢版 |
2022/08/03(水) 08:49:02.53ID:HRex91Fl
そのヘッダか忘れたけどコモンコントロール系はマクロが無いとやってられん
それ前提でMSDNにリファレンスがあるし
0296デフォルトの名無しさん
垢版 |
2022/08/05(金) 02:46:33.66ID:RasK5Hhu
大きな文字や小さな文字をコマンドプロンプトに同じ行で表示したいのですが可能でしょうか?
設定で変えるのではなくプログラムで結果によって変えたいのですが
よろしくお願いします。
0298デフォルトの名無しさん
垢版 |
2022/08/05(金) 13:41:02.21ID:w8qsceV0
8pt
   ■                 
   ■  ■     ■ ■■■■■  
 ■■■■       ■    ■   
   ■ ■     ■  ■■■■■■ 
  ■■■■■■   ■     ■   
 ■■■■   ■  ■     ■   
■  ■■   ■  ■■ ■■■■   
■ ■■   ■■  ■■ ■  ■■■ 
■■■■  ■■    ■ ■■■■   

16pt
      ■                ■               
      ■     ■         ■■   ■      ■■■  
     ■■■■■■■■         ■■   ■■■■■■■     
 ■■■■■■■■■            ■■        ■■     
     ■■               ■■        ■■     
     ■■   ■■          ■■        ■■■■■  
     ■■■■■■■■■        ■    ■■■■■■■■■■  
     ■■■ ■■ ■■■       ■         ■■     
   ■■■■  ■■   ■■     ■■         ■■     
  ■■ ■■ ■■     ■■    ■■         ■■     
 ■■  ■■ ■■     ■■    ■■ ■       ■■     
 ■■  ■■■■      ■■     ■■■   ■■■■■■     
■■   ■■■       ■■     ■■■  ■■   ■■■■   
■■   ■■       ■■      ■■   ■    ■■ ■■■ 
■■  ■■■     ■■■       ■■   ■■   ■■  ■■ 
 ■■■  ■   ■■■■        ■■    ■■■■■      
          ■■                           
0301デフォルトの名無しさん
垢版 |
2022/08/05(金) 23:51:13.34ID:2v49rt6J
NFT市場が2年で300億円→2兆円に急拡大したワケ
「保有する」だけではない、アート作品につけられた「価値」

市場規模ですね。これは少し古いデータになりますが、直近では、だいたい
2兆円ぐらいの市場規模になります。去年の3月ぐらいから盛り上がってきて、
2019年は300億円ぐらいと言われていたものが急拡大して、今や2兆円と
なっています。
一番大きいのが「コレクティブル」というものです。実際のNFTでいうと、
「CryptoPunks(クリフトパンクス)」とか「Meebits(ミービッツ)」など、
デジタルアートで、これが76パーセントを占めています。
他にはゲーム、スポーツの会員権のようなもの、メタバース上での利用、
アートなどに使われています。
0303デフォルトの名無しさん
垢版 |
2022/08/06(土) 01:06:28.07ID:A+9lJBuH
>>297
いえ、フォントのサイズです。
>>299
色も変えたいので見てみます。ありがとうございます。
>>300
そうですか。ありがとうございました。
0304デフォルトの名無しさん
垢版 |
2022/08/06(土) 09:37:57.13ID:Cm9is4wi
>>291
>windowsx.hに入ってるってことはMS推奨なんだろうし

20年くらい前なら同意するが
今はもう非推奨
0305デフォルトの名無しさん
垢版 |
2022/08/06(土) 09:38:29.30ID:Cm9is4wi
>>285
ダメ、絶対。
0306デフォルトの名無しさん
垢版 |
2022/08/06(土) 09:39:01.65ID:Cm9is4wi
>>287
やめとけ
0308デフォルトの名無しさん
垢版 |
2022/08/06(土) 15:56:25.30ID:eSBCWCwI
Win32API
0309デフォルトの名無しさん
垢版 |
2022/08/06(土) 16:07:28.86ID:LLV93bqs
知識としては必要だが、最初から最後までフレームワーク使わずにWin32だけでやるのは時間の無駄だろう。
0312デフォルトの名無しさん
垢版 |
2022/08/06(土) 19:07:52.04ID:LLV93bqs
この先そのコストを回収できるくらいプログラミングする見込みがあるかどうか次第だな。
0313デフォルトの名無しさん
垢版 |
2022/08/06(土) 20:41:33.14ID:mK2UhqOX
そのWin32APIのラッパーとなるべきフレームワークがことごとくゴミなんだもんよ
MS金余ってんだからQtでも買っときゃよかったのに
0314デフォルトの名無しさん
垢版 |
2022/08/06(土) 20:42:57.75ID:A61GDKit
>>312
学習した結果フレームワークがうんこだったと自覚したときの絶望感を、学習前にどのように織り込めばいいですか?
0315デフォルトの名無しさん
垢版 |
2022/08/06(土) 20:58:55.11ID:LLV93bqs
素のwin32と既存のフレームワークと自前のオレオレフレームワークのどれが一番うんこか次第だな。
0317デフォルトの名無しさん
垢版 |
2022/08/06(土) 21:39:07.40ID:nAr30yJy
win95時代にCで作ったハンドルメモリリーク検知付きのフレームワーク()があるけどいまだに世話になってる
新規でならC#で適当に作るがアプリの寿命を考えるといまだに上記フレームワーク()になるだろう
0318デフォルトの名無しさん
垢版 |
2022/08/06(土) 21:54:12.10ID:S1WP3eVH
男なら誰しも自分だけの車輪再発明・・・じゃなかったフレームワークを心に持つよな
0319デフォルトの名無しさん
垢版 |
2022/08/06(土) 22:13:31.50ID:mZ1/a9El
wxWidgets、DelphiのVLC、それの模倣のLazarus Component Library (LCL)位が今でも活発に開発されてるWin32フレームワークか。
wxWidgetsとC++Builder(VCL)には散々世話になった。
0326デフォルトの名無しさん
垢版 |
2022/08/09(火) 16:24:46.11ID:rOh0RBr3
経験しておくとライブラリの手抜きがわかってシステムのバグを予想しやすくなるけどな
0327デフォルトの名無しさん
垢版 |
2022/08/14(日) 17:46:08.17ID:qUOj9dBB
>>318
「車輪の再発明だから駄目」という理念は、先に進んでいるアメリカに有利な言葉。
後発者が上に上がって来ささないため、メンタルからくじく。
アメリカはそういう国。
0328デフォルトの名無しさん
垢版 |
2022/08/14(日) 18:48:02.83ID:W71axh2R
Googleは車輪の再発明しかしてないけどな
検索だって最初じゃない
その代わり頭の良い奴らが本気でやるから良いものになる
日本が得意としてた事だったがな
0332デフォルトの名無しさん
垢版 |
2022/08/15(月) 15:43:33.22ID:AOxAYYNB
>>331
彼らは、自分達が造ったものを遣わせてやりたいから「これ以上の再発明はするな」
と言ってくるが、自分達も実は再発明した結果であることは棚に上げている。
0333デフォルトの名無しさん
垢版 |
2022/08/15(月) 16:18:07.18ID:Z5BB7x+B
ここで車輪の再発明の指摘は的外れ
発明なんて一切してない
他人の成果物をソース読んでないからといって横取りする傲慢野郎
0334デフォルトの名無しさん
垢版 |
2022/08/15(月) 17:10:35.77ID:YGdpIuz3
いまさらソフトウェア開発競争を国家間の諍いの次元でしか捉えてないやつは
一行もプログラム組んでないのがアリアリだねw
0335デフォルトの名無しさん
垢版 |
2022/08/15(月) 18:25:51.34ID:AOxAYYNB
国家間というより、先に作ってしまった人が他人に別のものを作ってもらいたくない
心理が働くと、「車輪の再発明禁止」という如何にもまっとうなことらしき標語
となる。
0336デフォルトの名無しさん
垢版 |
2022/08/15(月) 19:37:50.16ID:/49gMCwa
車輪の再発明禁止は高機能なソフトウェアをオープンソースにするということで囲い込み、再発明させる気を起こさせなくしてる
オープンソース文化が強いものを更に強くしてしまってる
0337デフォルトの名無しさん
垢版 |
2022/08/15(月) 23:02:24.27ID:dK5hO1Lx
作って楽しそうなものなもものの内、芸術性を伴わず技術だけで
作れるようなものはほぼ全てオープンソースで無料になってしまっている
(フォトショップみたいな高機能なものは除く)。
0338デフォルトの名無しさん
垢版 |
2022/08/15(月) 23:10:53.60ID:AwPJsiC0
再発明をしないまでもその部品と構成や仕組みを知っていると高機能なアプリ開発などへの機転や応用が利きやすいと思う
0339デフォルトの名無しさん
垢版 |
2022/08/16(火) 01:19:06.38ID:agNT7bMr
以下のコードが動かなくて困ってます。

pgfFrame = AVIStreamGetFrameOpen(paviStream, (LPBITMAPINFOHEADER)AVIGETFRAMEF_BESTDISPLAYFMT);
AVIStreamGetFrameClose(pgfFrame); ←これを実行したら落ちる

AVIStreamGetFrameCloseを実行しなくても動くのですが、再度Openした時に少しずつメモリを食いつぶして行くので困ってます。
止まった時にVC++の実行ボタンを再度押すと、内部で使ってるDLLがアンロードされてその後は動くようになります。
そうなると何回でもOpen→Close出来る様になり、メモリも食いつぶしません。
どうしたらいいんでしょうか?
0340デフォルトの名無しさん
垢版 |
2022/08/16(火) 11:35:45.33ID:2x3mrzZQ
>>329
ほんそれ
0341デフォルトの名無しさん
垢版 |
2022/08/16(火) 11:41:24.43ID:2x3mrzZQ
>>339
AVIStreamRelease
(こっちは自動 Close してくれるとのこと)
0342デフォルトの名無しさん
垢版 |
2022/08/16(火) 14:36:20.03ID:agNT7bMr
>>341
詳しく書くとこうなってるんです。
AVIStreamGetFrameCloseだけ落ちるんで困ってます。
これを実行しなくても動くのですが、複数回Openするとどんどんメモリを食いつぶすので困ってます…

AVIFileOpen(&paviFile, FileName, OF_READ | OF_SHARE_DENY_NONE, NULL);
AVIFileGetStream(paviFile, &paviStream, streamtypeVIDEO, 0);
pgfFrame = AVIStreamGetFrameOpen(paviStream, (LPBITMAPINFOHEADER)AVIGETFRAMEF_BESTDISPLAYFMT);

if(pgfFrame != NULL){ AVIStreamGetFrameClose(pgfFrame); } ←これだけ落ちる
if(paviStream != NULL){ AVIStreamRelease(paviStream); }
if(paviFile != NULL){ AVIFileRelease(paviFile); }
0343デフォルトの名無しさん
垢版 |
2022/08/16(火) 14:45:35.08ID:ySPaUmMI
そういう不具合が出るけど是正が困難な処理は別プロセスとして動かして終わったらそのプロセスを終わらすといいよ
解決したら統合すればいい
0344デフォルトの名無しさん
垢版 |
2022/08/16(火) 15:02:38.50ID:2x3mrzZQ
プロセス別けて落とすのも同じ効果だと思うけど
DLLを自前でアンロードするコードを入れても良いんじゃないかな

そもそも
pgfFrame = AVIStreamGetFrameOpen(paviStream, (LPBITMAPINFOHEADER)AVIGETFRAMEF_BESTDISPLAYFMT);

この間の処理に問題があるんじゃないかな

if(pgfFrame != NULL){ AVIStreamGetFrameClose(pgfFrame); } ←これだけ落ちる
0345デフォルトの名無しさん
垢版 |
2022/08/16(火) 15:28:13.38ID:agNT7bMr
>>343-344
ありがとうございます。

>この間の処理に問題があるんじゃないかな
この間は何にもしてなくても落ちちゃうんですよね… なんでだろう?

DLLを自前でアンロードする事も視野に入れてもう少し試行錯誤してみます
0346デフォルトの名無しさん
垢版 |
2022/08/16(火) 15:45:44.34ID:2x3mrzZQ
AVIFileExit();
してないというオチ?
0347デフォルトの名無しさん
垢版 |
2022/08/16(火) 15:59:37.24ID:agNT7bMr
>>346
AVIFileInit()とAVIFileExit()
前に両方入れてみたんですが、入れても入れなくても何も変わらなかったんですよね…
あとでまた試してみます。
0348デフォルトの名無しさん
垢版 |
2022/08/16(火) 16:18:58.86ID:2x3mrzZQ
本気で解決したいなら再現する全ソースコードを晒すのと
実際に読もうとしてるファイルのURLを晒して逝け
0352351
垢版 |
2022/08/16(火) 21:27:27.79ID:agNT7bMr
正確にはコーデックの.dllをリンクして
そのコーデックを使っているファイルを読み込むと
AVIStreamGetFrameCloseが失敗するということです。
.dllをリンクしててもそのコーデックを使ってないファイルであれば
AVIStreamGetFrameCloseが失敗する事はなかったです。
0353351
垢版 |
2022/08/16(火) 23:11:48.85ID:agNT7bMr
古いバージョンにしてみたら直りました!
これで普通に動いてるのでこのまま動かしてみます。
みなさんありがとうございました。
0354デフォルトの名無しさん
垢版 |
2022/08/17(水) 09:12:41.44ID:17qdbn+g
バカの三大特徴

情報を小出しにする&後出しする
自分は間違ってないと思い込む&言い張る
正しい解決策に進まずすぐに別の山に登ろうとする
0358デフォルトの名無しさん
垢版 |
2022/08/22(月) 16:22:19.61ID:ChTfYzF8
日本語キーボード日本語Windowsで英数キー(CapsLockキー)のアップを捕捉する事って不可能?
レジストリでキーマップを変えて英数キーを違うキーに割り当てた後なら一般的なキー同様に捕捉出来ることは確認できたけどそういう迂回方法無しで出来る方法があれば教えてもらいたい
0359デフォルトの名無しさん
垢版 |
2022/08/22(月) 17:26:47.15ID:Zp58Sca6
GetKeyState( vk_code )
 VK_CAPITAL CapsLockのトグル状態 のほうじゃなく
 VK_OEM_ATTN 仮想キーコード 240 (0xF0) で今の押下状態は取得できそうではあるな

IMEはちゃんと shift 無し Caps lock キーを受け取って反応できてるんだし
0361デフォルトの名無しさん
垢版 |
2022/08/22(月) 18:27:49.15ID:x6NjRtAl
ノートパソコンなどの省スペースキーボードについてるFnキーも拾えないんだよなあ、GetKeyState&GetAsyncKeyState
0362デフォルトの名無しさん
垢版 |
2022/08/22(月) 21:05:07.73ID:pMMCnUP8
fnはosの預かり知らないキーなので同列にすんなハゲハゲハゲハゲハゲ!!!!!!!!!!!
0363デフォルトの名無しさん
垢版 |
2022/08/22(月) 21:25:09.66ID:6BQsurqE
キーボードのコントローラーが勝手に処理してるでしょう
CPUまで線がつながってない感じ
0369デフォルトの名無しさん
垢版 |
2022/08/31(水) 12:36:32.64ID:twZsJrmt
>>355
ライセンスはどうしてるの?
GPLやLGPLだから、リンクすれば最低でも自作プログラムのオブジェクト
ファイルの公開が必要になるだろう。
別コマンドで実行する場合は、*.exe が自作アプリと合わせて二つ必要になるし、
データの受け渡しの効率も落ちる。
0370デフォルトの名無しさん
垢版 |
2022/09/02(金) 22:59:42.92ID:L2uZLmEf
質問です。

GetCharABCWidths()を用いて、TextOut()で描いた文字のABC構造体を取得しています。

Arialフォントのような欧文フォントを用いてTextOut()で"あ"を描いた場合、そのフォント内には"あ"という日本語文字は入っていないため、適当な代替フォントに置き換えられて"あ"が描かれるようです(たぶん「フォントリンク」という機能だと思います)。

この時にGetCharABCWidths()で得られるABC構造体には、描かれた"あ"の寸法が入っておらず、ダミーの寸法が入ってきてしまいます。

msdnのGetCharABCWidths()APIの項には、
The ABC widths of the default character are used for characters outside the range of the currently selected font.
とあるので、APIとしては仕様どおりの動作なのですが、では、描かれた"あ"のABC寸法を得るにはどうすればよいのでしょうか?

以上、よろしくお願いします。
0371デフォルトの名無しさん
垢版 |
2022/09/04(日) 10:57:34.63ID:RQxkFcRF
GetTextExtentPoint32()
SetTextJustification()
DrawText()
0372デフォルトの名無しさん
垢版 |
2022/09/04(日) 16:57:14.39ID:aZX/9mcR
>>371
ありがとうございます。

GetTextExtentPoint32()だと、文字の左余白(A), 文字自体の幅(B), 文字の右余白(C)の
和の値(A+B+C)しか得ることができません。

そうではなくて、各文字について、A,B,Cそれぞれの値が知りたいのです。
それを返してくれるのがGetCharABCWidths()なのですが、>>370に書いたように
正しい値が返ってこない場合があります。

一応、自分で考えた対処方法として、
1. GetTextExtentPoint32()で、文字のA+B+Cの値を取得
2. その幅を持つ白色の描画領域を確保し、その原点位置から黒色でその文字を描画
3. 領域に描画された結果(白・黒)を左端から走査して、左余白(A)を得る
4. 同様に右端から走査して、右余白(C)を得る
5. 手順1で取得したA+B+Cの値からAとCを減じてBを得る
という風にすれば、(どんくさいですが)知りたい値を得ることはできると思います。

ちなみに、実際には、上のやり方そのままではうまくいかないことがありそうです。
というのも、イタリック体にしたりすると、AやCの値がマイナスになることがあるからです。
その場合、上のやり方だと、文字の左右が領域からはみ出て描画されてしまいます。

なので、左右にある程度の余裕を持った領域、例えば幅「100+A+B+C+100」の領域を確保し、
(x,y)=(100,0)の位置に文字を描画する。
そうするとはみ出さずに描画できるので、100の余分な余白があることを考慮に入れて計算すれば、
A,B,Cを得られるだろうと考えています。

でも、こんなやり方は面倒くさい。もっとマシなやり方はないのだろうか・・・。

例えば、フォントリンク?で描画されたときに、どのフォントが使われたのかがわかれば、
そのフォントを明示的にデバイスコンテキストに指定してGetCharABCWidths()呼べば
A,B,Cの幅を得られるはずですが、フォントを知る方法はわかりませんでした。
0374デフォルトの名無しさん
垢版 |
2022/09/04(日) 19:32:04.85ID:aZX/9mcR
ありがとうございます。

作っているアプリの仕様は、
・アプリのユーザは、フォントと文字列を自由に指定できる
・画面上には、指定したフォントで、指定した文字列が描画される

やりたいことは、
・ユーザが上記の操作で描画させた文字列中の各文字について、A,B,Cの幅を知りたい

ということなのです。

本来NGな組み合わせ(例:欧文フォントと、全角まじり文字列との組み合わせ)をユーザーが指定した時、
存在しない文字がいわゆる豆腐(□)にでも化けてくれれば、そこでユーザは別のフォントを
選びなおすはずです。

しかし、文字化けせずに一見正しく表示されてしまうため、困っています。
0375デフォルトの名無しさん
垢版 |
2022/09/04(日) 23:44:22.53ID:047Xbk5t
>>374
ABCなんて何に使うんだろうと思ったら、フォント情報を表示するツールなのか。
GetCharacterPlacement + ExtTextOut / ETO_GLYPH_INDEX あたりで、グリフを直接描画すれば
フォントリンクは効かないはずなので無い文字は豆腐になるはず...
0376デフォルトの名無しさん
垢版 |
2022/09/05(月) 20:04:11.68ID:lEq1EKXB
ありがとうございます。
参考にさせていただきます。

可能ならば、無理やり豆腐にするんじゃなくて、フォントリンクで表示されたとおりの文字の情報を取得できるのが理想ですが、難しそうですね・・・
0377375
垢版 |
2022/09/05(月) 23:27:10.40ID:ViUtFxr1
>>376
GetCharABCWidthsで取得しても1文字単位でしか取得できないので、筆記体やアラビア文字のように前後の文字や位置によって大きさが変わるような場合には対応できないので、ABCの値は参考程度にしか使えないと思います。

フォントリンク先のフォント情報(LOGFONT)は、メタファイルに出力後そのメタファイルを解析するというちょっとトリッキーな方法で可能です。
https://stackoverflow.com/questions/54050095/how-to-tell-if-a-surrogate-pair-unicode-character-is-supported-by-the-font
0378デフォルトの名無しさん
垢版 |
2022/09/06(火) 20:18:06.15ID:H7QyPUx+
大変有用な情報、ありがとうございます。

確かに、筆記体のような手を繋ぐフォントの場合、うまくいきませんね。
これは気づきませんでした。
実際にはそういったフォントが使われることはまれなので、大きな問題にはならないかな、と思います。
0379デフォルトの名無しさん
垢版 |
2022/09/10(土) 21:08:59.03ID:eGqDTe4p
HBITMAP hBitmap; に既に bitmap image が load されているとき
BITMAP bm = {0};
GetObject(hBitmap, sizeof(BITMAP), &bm);
で bm.bmBits の指す場所に pixles data があることは確認出来るのですが
bm.bmBits は何時 GlobalFree(bm.bmBits); すれば良いのでしょうか?
放置しても memory leak の心配はありませんか?
0381デフォルトの名無しさん
垢版 |
2022/09/13(火) 22:06:19.57ID:V8hEwwJT
ウインドウのキャプションを SetWindowText で変更したいのですが

そのウインドウはブラウザ(クローム系)でして
SPY++が使えなくなっているので自作のウインドウ一覧で調べると
ブラウザのトップレベル・ウインドウは、アクティブなタブのキャプションが
ウインドウのキャプションになっており、クラス名は"Chrome_WidgetWin_1"でした

これで取得したウインドウ・ハンドルを使って、ブラウザの位置を操作したり
最小化したりできるので、このハンドルで間違いないはずですが

SetWindowText でキャプションを変更することはできません
ブラウザには使えないということでしょうか
御存じの方、教えて下さると幸いです
0383デフォルトの名無しさん
垢版 |
2022/09/14(水) 09:06:44.89ID:bpmiLen5
そうです
ウインドウのキャプションを変更したいけど
それはブラウザでは、タブのキャプションを変更したいということですね

ブラウザのトップレベルのウインドウハンドルで、GetWindowTextを使って
そのタブのキャプションが取得できるのに
逆に、そのハンドルでタブのキャプションはSetWindowTextでは変更できない
ということのようです

タブが子ウインドウになっていてアクセスできればいいのですが
そこらへんブラウザは色々と特殊な作りなので無理っぽい気はしてます
0384デフォルトの名無しさん
垢版 |
2022/09/14(水) 09:46:31.10ID:mWSu9Hj1
ふーんGetはできるんだタスクバー用かな?
どう見てもオーナードローだし
htmlのtitle変える方が早そうだね
0385デフォルトの名無しさん
垢版 |
2022/09/14(水) 12:31:23.77ID:NjIHRu5t
SetWindowText実行後にGetWindowTextしたら変更後のキャプション取得できてるんじゃない?
表示処理が別なだけで
0386デフォルトの名無しさん
垢版 |
2022/09/14(水) 15:26:33.97ID:bpmiLen5
>>385
その通り、内部的には変更されてました!!
ありがとうございました
聞いて良かった、自分だけで考えていたら堂々巡りで違う発想は出てこないものですね

見た目のキャプションはどうでも良くて
ブラウザを複数起動して、全て同じサイトを開かせるので
それをUWSCで操作しようとすると、どれが処理済なのか区別つかないので
処理済のやつのキャプションを変えてやろうということだったのです
0388デフォルトの名無しさん
垢版 |
2022/09/14(水) 21:36:59.23ID:bpmiLen5
386の話?
そんなことないですよ
ウインドウキャプションと、クラス名が同じウインドウがいくつもあるので
UWSCはそれのどのウインドウが処理対象か分からないってことです

YouTubeから動画をDLするサイトを自動で開いて
新着の動画アドレスを自動入力してDLさせるんですが
一つがDL処理中に、別の新着動画が来ることがあるので
0389デフォルトの名無しさん
垢版 |
2022/09/14(水) 21:56:53.98ID:RXLSqQDl
入力されたキーコードをキーボードの文字に変換してくれるAPIとかありますか?
それかC/C++の関数とかで。
SHIFTのコードを渡すと、"SHIFT"みたいに文字が返ってくるみたいな。
0390デフォルトの名無しさん
垢版 |
2022/09/15(木) 10:19:13.76ID:HISUe1p2
どとねとにはあるけどお
スレ違いかな
大した手間でもないしご自分で用意すれば
そもそもC/C++ならマクロを糞すればリテラルを文字列に変換できるんだし
ちょっとは頭使え?
0391デフォルトの名無しさん
垢版 |
2022/09/15(木) 11:00:05.62ID:cizFucC9
>>388
>>354
0394デフォルトの名無しさん
垢版 |
2022/09/18(日) 13:46:05.81ID:KpBP36NG
>>393
グロ
fishing
0396デフォルトの名無しさん
垢版 |
2022/09/22(木) 19:31:36.45ID:5qbo/wEx
可愛いよね
名前知らない?
0397デフォルトの名無しさん
垢版 |
2022/09/23(金) 02:06:12.74ID:gD4It3Ab
STUのがかわいい
0398デフォルトの名無しさん
垢版 |
2022/10/31(月) 14:20:10.23ID:un31Hzpa
VisualStudio2022で
C++でGdiplusを利用して、メタファイルとして描画した図形を保存するプログラムを作成しました。
(描画時メタファイルのパラメータはGdiplus::EmfTypeEmfPlusDualを使用して作成しました。)
保存した図形ファイルをエクセルで開いて、Ctrl+Cでクリップボードにコピーしました。
この状態で、EnumClipboardFormatsを使用して、クリップボードのフォーマットを取得しました。
予想だと、WinUser.hで定義されている
#define CF_ENHMETAFILE 14
になるのかと思っていたら、実際は49161が取得されました。

質問ですが、この時取得された49161は何のフォーマットを意味しているのでしょうか?
0400デフォルトの名無しさん
垢版 |
2022/10/31(月) 15:48:17.35ID:un31Hzpa
>>399
ありがとうございます。
すいません、質問なのですが
Gdiplusを利用して作成したメタファイルをAPIを使用して汎用データオブジェクトとしてクリップボードに設定したいのですが、
参考になる書籍、ホームページ等ありましたらお教えいただけないでしょうか?
0401デフォルトの名無しさん
垢版 |
2022/10/31(月) 21:10:12.34ID:Y7EKu9E5
EnumClipboardFormats()使ってるんだからOpenClipboard(),SetClipboardData()はわかるよね
何を聞きたいんだろう?
0402デフォルトの名無しさん
垢版 |
2022/11/01(火) 00:53:41.11ID:8bbAESJs
>>401
昔からあるGdiで拡張メタファイルを作成して
OpenClipboard()
SetClipboardData(CF_ENHMETAFILE, handle_enhanced_metafile)
CloseClipboard()
で問題なく、拡張メタファイルがクリップボードに設定されていました。
それをGdiplusを使用してメタファイルを作成して
OpenClipboard()
SetClipboardData(CF_ENHMETAFILE, handle_enhanced_metafile)
CloseClipboard()
に改造したら問題が発生しました。

問題というのはエクセルにクリップボードからペーストすると、「図の書式設定」で「高さの倍率」「幅の倍率」が100%以下の数字になり
意図していたサイズより小さく表示されるようになってしまいました。

クリップボードに設定したメタファイルを、ファイル出力して、エクセルからファイルを開いて描画した図形を表示すると問題なく意図したサイズで表示されていました。

以上の事により、問題が発生する原因はクリップボードへの設定に問題があるのではと考えました。

エクセルにペーストしたGdiplusメタファイル図形を、さらに、エクセルでコピーすると、クリップボードには、なんのフォーマットとして扱われているのか調べてみました。
EnumClipboardFormatsを使用して、クリップボードのフォーマットを取得するとCF_ENHMETAFILEではなく、49161でした。

以上のことによりSetClipboardDataの第一引数はCF_ENHMETAFILE:14ではなく汎用データオブジェクト:49161を設定すべきかと考えました。
しかし、単純にCF_ENHMETAFILEを49161に変えただけでは、クリップボードにGdiplusメタファイル図形は設定されず、エクセルに何もペーストされませんでした。

希望は、Gdiplusメタファイル図形を汎用データオブジェクトとしてクリップボードに設定する方法を知りたいということです。

何かご存じの事がありましたら、お教えお願いします。
0403デフォルトの名無しさん
垢版 |
2022/11/01(火) 02:33:36.53ID:F5k3ZiCa
CF_ENHMETAFILEがあるのに49161をセットするなんておかしいよ
倍率以外はうまくいってるんだし
同じ図形でGDIのとGDI+のでENHMETAHEADERのメンバの値で違うのはない?

「DataObject 49161」でググったら以下のページが出た
https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/5a85a9a6-88a3-4cba-8b19-31c979eea7fa/clipboard-unable-to-enum-registered-clipboard-formats-as-local-system?forum=vcgeneral
49161はこれなのか?
0404デフォルトの名無しさん
垢版 |
2022/11/01(火) 09:43:25.52ID:23hVAbRk
スレ立てるまでもない質問スレで詳しいこと言ってたら教えてやったんだがな
流したやつに教えてやる気にはならんわ
0405デフォルトの名無しさん
垢版 |
2022/11/01(火) 10:48:01.32ID:8bbAESJs
>>404
すいませんでした。
こちらで聞いた方が良いとレス頂いたので
こちらに移って質問していました。
もし、何かご存じならご教授頂けないでしょうか
よろしくお願いします。
0406デフォルトの名無しさん
垢版 |
2022/11/01(火) 11:42:30.98ID:8bbAESJs
>>403
レスありがとうございます。
ENHMETAHEADERについてですが精査してみます。
(出力先をクリップボードでなくファイルにした場合、エクセルで開いても問題が発生していないのでメタファイルには問題ないかと、あたりをつけていました)

CF_ENHMETAFILEについてですが、メタファイルは以下の3種類があるようです
・Windows メタファイル形式 (WMF)
・拡張メタファイル (EMF)
・EMF+

描画時メタファイルのパラメータはGdiplus::EmfTypeEmfPlusDualを使用して作成しましたので
EMF+として作成されているのかとも思っています。
そうするとENHMETAHEADER←拡張メタファイル (EMF) を使用しても良いものか疑問に思っています

リンクありがとうございます。検討してみます。
0407デフォルトの名無しさん
垢版 |
2022/11/01(火) 11:53:24.91ID:8bbAESJs
>>406
すいません、一部訂正です。
【誤】そうするとENHMETAHEADER←拡張メタファイル (EMF) を使用しても良いものか疑問に思っています
【正】そうするとCF_ENHMETAFILE←拡張メタファイル (EMF) を使用しても良いものか疑問に思っています
0409デフォルトの名無しさん
垢版 |
2022/11/03(木) 10:41:37.80ID:tn2ZhR3p

他スレを勧められて続きはそっちでやることを宣言したのに、マルチ警察はこの上何を望むんだろう。
0410デフォルトの名無しさん
垢版 |
2022/11/03(木) 10:49:58.97ID:dhtr0mvL
前スレで詳しいやつが回答してるのにアスペから自分にはわからんから移動しろと言われてここに来てるだけのアホだから
0411デフォルトの名無しさん
垢版 |
2022/11/03(木) 11:18:16.59ID:tn2ZhR3p
マルチがどうこうより、せっかく回答したのに無視されたのが気に入らないってことね。
0412デフォルトの名無しさん
垢版 |
2022/11/03(木) 11:28:13.59ID:irjlHMAb
回答があるのに他で聞くのはマルチだろ
マルチがなぜ嫌われるのか理由までは知らないのか
0413デフォルトの名無しさん
垢版 |
2022/11/03(木) 11:47:59.65ID:tn2ZhR3p
マルチをしないからといって回答が無視されなくなるわけではないからそこは的外れだと思うぞ。
0415デフォルトの名無しさん
垢版 |
2022/11/03(木) 14:53:14.39ID:XfULePpa
>>408
スレ立てるまでもない質問はここで 162匹目 に質問を出しました。

 253 で49161は何のフォーマットか質問しました。
 254 で汎用DataObjectだとレスを頂きました。
 256 で254に対するお礼のレスをしました。
 257 でWin32API質問箱 Build127の方が良いのでは?とレスを頂きました。
 258 で そちらで聞いてみます と257にレスしました。

その後Win32API質問箱 Build127 に移って 398 で質問を始めました。

以上が今までの経緯なのですが、何か問題があるのでしょうか?
0416デフォルトの名無しさん
垢版 |
2022/11/03(木) 15:08:57.81ID:SIQRCQUk
面倒くさいから追いかけないけど、別に問題あるようには見えない

>>410が正解書いてるような空気醸しだしてるから、その回答レス番書いてくれたら話が変わるかもしれんけど
実は正解ではない別のレスを書いててスルーされた恨みで警察に転職した可能性も感じる
0417デフォルトの名無しさん
垢版 |
2022/11/03(木) 15:26:38.66ID:76hysst1
恨みとか知らんし警察は俺じゃないけど雑な質問だからそれなりの回答しかしてない
詳しく聞けば教えてやったけど
こっちの方が詳しい人がいると聞いてすぐ移ったから回答しなかっただけだが回答しなきゃいけない理由もないだろ
こっちの詳しい人()に聞けばいいだけ
それで何か問題あるか?
0418デフォルトの名無しさん
垢版 |
2022/11/03(木) 15:43:26.06ID:/zL/TWh/
向こうのスレみて来たけど、マルチ嫌いの俺ですら全く問題ないなw
なにを拗ねてるんだこやつは
0419デフォルトの名無しさん
垢版 |
2022/11/03(木) 15:46:54.91ID:76hysst1
知ってることを回答しないだけで非難される言われはないぞw
お前が教えてやればいいだけ
本人でないならな
0420デフォルトの名無しさん
垢版 |
2022/11/03(木) 15:47:33.06ID:76hysst1
俺より詳しいやつがいるスレだからそれで問題ないはずだが何を怒ってるのか
0421デフォルトの名無しさん
垢版 |
2022/11/03(木) 15:48:42.41ID:SIQRCQUk
>>417
その通り
マルチの話題でも何でもない無関係なことで話を拡げず、すっこんでろとしか

元スレで回答出てるならそれで終了
スレ移して質問続くなら普通にやってくれ
0422デフォルトの名無しさん
垢版 |
2022/11/03(木) 16:06:19.20ID:GeJ34bDq
49161は何のフォーマットか?なんてのは枝葉で
本質は同じフォーマットになるような方法はないのか?なんだよな
わからん
0423デフォルトの名無しさん
垢版 |
2022/11/03(木) 16:13:11.60ID:GeJ34bDq
枝葉への回答は前もココにも付いてる通り 汎用データオブジェクト
これで最初の質問は完了してるん
0425デフォルトの名無しさん
垢版 |
2022/11/05(土) 00:48:25.93ID:mvfmSa9B
EMFは糞
GDI+も糞
0426デフォルトの名無しさん
垢版 |
2022/11/06(日) 21:20:50.65ID:ZfA7UEIS
特定のウィンドウがFlashWindowしてるかどうか知りたいのですが、何か方法はありませんか?
画像取得して色確認するとかしかないですか?
0430デフォルトの名無しさん
垢版 |
2022/11/18(金) 21:22:52.50ID:zsUVThtH
セッションID=0のタスクスケジューラーのプロセスから他のセッションID=1以上のGUI持ってるプロセスの操作したいんだけど
同じセッションIDのプロセスを作ってやらないと無理だったかな
0431デフォルトの名無しさん
垢版 |
2022/12/06(火) 11:39:49.01ID:63yxghiR
スレッドが自身のスタック領域の開始アドレスを知る方法はありますか?
サイズならTEB構造体から取得できるようなんですが

参考
https://ja.stackoverflow.com/questions/47840/windows-visual-studio-2015-c-%E3%81%A7%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E3%81%AE%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF%E3%82%B5%E3%82%A4%E3%82%BA%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95
0432デフォルトの名無しさん
垢版 |
2022/12/06(火) 18:52:16.04ID:uLZynctc
>>431
サンプルソースは見たの?

>サイズならTEB構造体から取得できるようなんですが
正確にはStackBase, StackLimit を取得できるので、その差分からサイズを求めている。
teb->Reserved1[1] を使えばよいはず。
0433デフォルトの名無しさん
垢版 |
2022/12/08(木) 05:02:17.43ID:7N/fyoNc
>>432
あー確かに減算してますね。
気がつかなかった私がどうかしてました。
ご指摘ありがとうございます。
0434デフォルトの名無しさん
垢版 |
2022/12/19(月) 11:12:22.75ID:aTW+qgB5
ディスクへの書き込みを別の場所へ書き込むようにインターセプトすることってドライバじゃないと不可能?
ReadDirectoryChangesやFindFirstChangeNotificationって通知だけでディスク変更操作に手を加える事は出来ないよね
パスが常に一定の物であればジャンクションやシンボリックで対応可能なんだけど
0435デフォルトの名無しさん
垢版 |
2022/12/25(日) 08:27:23.13ID:z6jdEPeL
その程度の知識の素人が手を出せるレベルの処理じゃないだろ
仮想デバイスとかどうすんの
0436デフォルトの名無しさん
垢版 |
2023/01/19(木) 12:53:53.04ID:RyyxmaOy
古い32bitプログラムをVS(ツールセット2010)でx64でビルドしてるんですが
「外部シンボル "sprintf" は未解決です」などのリンクエラーが大量に出て困ってます。
「legacy_stdio_definitions.lib」を使えという情報もあったんですが
2010ベースだと恐らくない?為か見つからないと怒られます。
色々事情があって最新版には移行出来ません。64bit化は諦めるしかないでしょうか?
0437436
垢版 |
2023/01/19(木) 14:01:27.21ID:RyyxmaOy
>436
チマチマと自分で設定弄ったりしてたら解決出来そうでした。
0439デフォルトの名無しさん
垢版 |
2023/01/22(日) 10:35:53.94ID:JlW1CBNq
Windows Explorerではファイルに由来する属性、例えば画像のサイズとか、
MP3のタイトル、プログラムの説明とか表示できるけど、
それを取得するAPIは用意されててつかえたりしますか?
それともあれはExplorerで頑張って色んなフォーマットに対応してるの?
0441439
垢版 |
2023/01/22(日) 13:35:39.24ID:JlW1CBNq
>>440 Shell32.dllのGetDetailsOfを使うのずばりでした。
ありがとう!自前で全部揃えるのは嫌だとおもってたから。
0443デフォルトの名無しさん
垢版 |
2023/01/27(金) 14:29:22.14ID:BWAW0Di3
>436-437
もう解決したみたいだけど
文字通り legacy_stdio_definitions.lib をリンクすれば良い
あるいは sprintf をやめて安全な snprintf (それ以外の legacy があればそれらも) 等を使うコードに変更する
0444デフォルトの名無しさん
垢版 |
2023/01/28(土) 15:17:14.74ID:SSo2rJoB
俺もそろそろANSI32bitアプリをunicode64bitアプリに更改したいなあ
まあ64bitにする意味は全く無いんだけど
せめてunicode化して、流行りの顔文字ぐらい表示できるようにしたい
あれのレンダリングはどうやるんだろうね
TextOutみたいなレベルのAPIじゃ無理だよね?
0447デフォルトの名無しさん
垢版 |
2023/02/01(水) 03:54:55.92ID:axeNk+I4
QueryPerformanceFrequencyで取得した値が10MHzになってるんですが
何時からこの値になったのか、時期と実装が変わった経緯分かる方いますか??
0449デフォルトの名無しさん
垢版 |
2023/02/06(月) 00:05:16.01ID:diZedZj+
>>447
最近2台のPCで取得したら10MHzだった。第8世代か第9世代のCoreと第10世代のCore。
ぐぐったらもうちょっと小さい値が出てきた。
0451デフォルトの名無しさん
垢版 |
2023/02/12(日) 10:07:22.45ID:/9PGWL3V
ResEditが無くなってしまったみたいだけど、何があったんや?
単に需要がなくなっただけ?
0453デフォルトの名無しさん
垢版 |
2023/02/13(月) 02:53:34.52ID:S9jIVDl5
ウィンドウメッセージキューと socket を WaitForMultipleObjects みたいに同時に待ち受ける方法はある?
現状は通信処理は別スレッドでやってるけど、これを敢えて GetMessage のループでやりたい。
というのも、好奇心上の取り組みでメモリ使用量を極限まで減らしたくて、まずスレッドを減らしてみようと思って。

あとちょっと API の話からは逸れるんだけど、VisualStudio で C++ のデスクトップアプリの雛形をビルドしただけのものでもメモリをコミットサイズで 2MB とか食ってて、スレッドも 4つくらい動いてるんだけど、これって何?
起動してから少し放っておくとスレッドは 3つくらい終了するから、いらないものなら排除したい。
いろいろ削ぎ落とすリンカオプションの設定とかあったら教えてほしい。
スタックサイズやヒープサイズは数十KBに設定してみたけど、あんまり違いは見えない。
0455453
垢版 |
2023/02/13(月) 13:19:42.95ID:l/ezgd5T
>>454
それだ!
ありがとー
0456デフォルトの名無しさん
垢版 |
2023/02/14(火) 08:25:48.17ID:WQfmJH2L
ソケットなら WSAAsyncSelect でソケットのイベントを WindowMessage に連動させる案もある
0457453
垢版 |
2023/02/14(火) 14:53:30.32ID:BK5WxDX8
>>456
それの方が GetMessage のループに馴染みそう。
そっちも試してみるよ。ありがとー
0458デフォルトの名無しさん
垢版 |
2023/02/15(水) 11:23:09.93ID:bSshLO82
シンプルにやるならGetMessageじゃなくPeekMessageでノンブロックループして定点観測するという事も出来る
0459デフォルトの名無しさん
垢版 |
2023/02/15(水) 12:21:16.78ID:bwlsc68o
>>458
そのループがノーウェイトのビジーループになっちゃうじゃん
やることあるときだけ GetMessage が返ってくれるんだから、そっちのがシンプルでしょ。
0460デフォルトの名無しさん
垢版 |
2023/02/15(水) 13:10:37.60ID:J40TkLkU
ところで、メッセージループで GetMessage したメッセージを DispatchMessage せずに、そのループ内で処理しちゃってもいい?
ウィンドウプロシージャに書いてる switch やら DefWindowProc をループ内に直接書いちゃうの。
0461デフォルトの名無しさん
垢版 |
2023/02/15(水) 13:33:51.32ID:bSshLO82
>>459
いや何も処理する事がなければSleep(1)でも挟むのが常套手段
GetMessageの内部だってそうなってるはず
GetMessageの場合はカーネル空間でループ回してるだろうからPeekMessageループよりIO回数が減ってパフォーマンス上は有利だろうが
0462デフォルトの名無しさん
垢版 |
2023/02/15(水) 13:43:45.82ID:N1k6+oAn
>> 460
ダメです
DispatchMessageは自プロセスに飛んできたOSとか他プロセスのメッセージも振り分ける

>> 461
待つならSleep(1)よりもWaitForSingleObjectのほうが軽い
0463デフォルトの名無しさん
垢版 |
2023/02/15(水) 13:48:07.11ID:S4bShmel
>>461
常套手段ってw
そしたら到着したメッセージを即座に処理できないでしょうよ。
イベントを待つというのは待ちながらもシグナル時は即座に反応できるというのが最大の利点なのに、わざわざそれを殺してどうするの。
そしてカーネル空間でも GetMessage は sleep しながらのループでなんか回してないと思うよ。
アプリケーションが何かを待ってる時には、スケジューラがそのアプリの実行を止めてしまう(タイムスライスをあげない)。
GetMessage で言えば OS がメッセージをキューに入れた段階で GetMessage してるプロセスにタスクスイッチする。
ディスクI/O しかり、socket しかり、タイマーしかり。
本当に CPU が何もしないときなら HALT してハードウェア割り込みを待ってる。
0464デフォルトの名無しさん
垢版 |
2023/02/15(水) 16:44:48.20ID:STPisL/8
WM_KEYDOWN
Ctrl+0(ゼロ)とかShift+0は来るのに、Ctrl+Shift+0は来ないのはなんでなん?
0465デフォルトの名無しさん
垢版 |
2023/02/17(金) 22:01:39.95ID:rxib1RET
定番のSleep(1)にこれだけ噛みつけるのも面白いな
0468デフォルトの名無しさん
垢版 |
2023/02/18(土) 16:35:58.18ID:nz9Z1NDi
イベント待ちはSleep(1)のポーリングでもどうでもいいと思うぞ
シングルスレッドで全部処理する場合問題はそこではないし
扱う内容によっては毛局スレッドを分けた方がいいって結論になる
0469デフォルトの名無しさん
垢版 |
2023/02/18(土) 21:28:29.45ID:CT5am8vz
今時とかじゃない
>>463を読むほど笑えるという話
0472デフォルトの名無しさん
垢版 |
2023/02/19(日) 01:28:55.07ID:15y14fHP
1つの応答基準の60fpsが16.7ms間隔だからその間に処理が終わってれば常人の目には判らないし
待ち行列にメッセージが溜まってたりイベント処理が発生した場合、処理してる間にコンテキストスイッチが何度も起きて場合によっては1msなんて超えてくる
Sleep(1)はOSに時間を明け渡す気がありますよ程度の意味しかない
0473デフォルトの名無しさん
垢版 |
2023/02/19(日) 01:46:44.83ID:QabSn9vm
マウス、キーボードの処理、ダイアログの更新のメッセージ処理くらいなら事足りる
昔のゲームもOllyDbgやIDAつかって覗いてみるとPeekMessageやGetTickCount等を使って一定時間間隔のメッセージ処理ループをやってた
0474デフォルトの名無しさん
垢版 |
2023/02/19(日) 08:53:33.42ID:zBhvMYFK
>>473
それはウィンドウメッセージ以外の処理を並行してやるためでしょ。
均等時間で処理を進めたいとかそういう事情が無ければ大人しくイベント待ちすればいいのに、そうせずわざわざ Sleep するとどんないいことがあるの?
0476デフォルトの名無しさん
垢版 |
2023/02/19(日) 10:23:12.36ID:QabSn9vm
前レスよく読まなかったけど、GetMessage()で済むところをPeekMessage();Sleep(1);でループしてメッセージのポーリングするってことか。
なんでわざわざそんなことを?w
0477デフォルトの名無しさん
垢版 |
2023/02/19(日) 10:54:48.53ID:jNkDtxGh
WinFormsのソースもPeekMessageでWindowメッセージがあればそれの処理、無ければタスクキュー処理って流れだったはず
0478デフォルトの名無しさん
垢版 |
2023/02/19(日) 11:25:42.35ID:xSIr/CQB
>>477
それと
> PeekMessage();Sleep(1);でループしてメッセージのポーリングする
が同じに見えるのか?
0479デフォルトの名無しさん
垢版 |
2023/02/19(日) 11:36:42.06ID:jNkDtxGh
>>478
Sleepは知らんがPeekMessageでブロックせずに他の定期処理挟むのは別に普通って言いたかっただけ
0482デフォルトの名無しさん
垢版 |
2023/02/24(金) 14:07:57.59ID:uAuRZ8t6
質問ですがOpen(Save)Dialog等でOFN_DONTADDTORECENTが無効の場合、この履歴情報はどこに保存されますか?
0483デフォルトの名無しさん
垢版 |
2023/02/24(金) 14:25:10.37ID:uAuRZ8t6
すみません
エクスプローラの履歴を消したら消えました
質問を取り下げます
0485デフォルトの名無しさん
垢版 |
2023/02/25(土) 14:47:53.07ID:i9tFdOEb
>>484
C++でもWin32APIはWin32APIです。
MFCは別物。

元々はC/C++からWin32APIを呼び出す前提だったけど、
今はC#、Python、Rust等いろいろな言語から呼べるらしい。
0487デフォルトの名無しさん
垢版 |
2023/02/25(土) 17:08:15.41ID:VP7n/u9I
GDI+ はリファレンスは C++のインターフェースだけど
細かくほぐしたら Cや他言語に対応できるのかな
0489デフォルトの名無しさん
垢版 |
2023/03/04(土) 00:35:03.13ID:cng4hKxr
>>484
MFCを使わせたかったのはVisual C++だった。

WindowsアプリケーションはC言語かC++を使うのが前提の歴史があって、MFCはWindows APIをラッピングしたものだった。

マイクロソフトはライブラリの作り方がよくわからず、MFCはコードが複雑になるだけのもの。

Java SEのライブラリが登場してから、マイクロソフトは失敗に気づいて.NET Frameworkを作ることになる。
0490デフォルトの名無しさん
垢版 |
2023/03/04(土) 01:13:44.99ID:poIq8zq5
>>489
MicrosoftのVisual C++のMFC
BorlandのC++ BuilderのVCL
当時のWindowsでのC++用クラスライブラリでのシェア競争の結果Borlandが敗れてMFCが主流になった
.NET FrameworkはもともとWindows DNA構想から産まれてきたものでMFCとは起源が別
0491デフォルトの名無しさん
垢版 |
2023/03/04(土) 01:56:42.82ID:fku36Zva
MFCの設計が変なのは出てきた時期も悪かったと思うね
まだVC++含めて各C++コンパイラでtemplateもまともに動かない&互換性に問題があるような状態だったし
0492デフォルトの名無しさん
垢版 |
2023/03/04(土) 04:09:52.49ID:HiKr/1U9
MFCは最初から死産だったがMS製だからVisualStudioに標準で入ってるからと使わざるを得なかっただけ
設計思想はDelphi(C++Builder)よりも数段劣ってる
当時のC++がうんこすぎたのもあるがこれは処理系の設計者のセンスの問題だろう
0494デフォルトの名無しさん
垢版 |
2023/03/04(土) 10:32:23.94ID:IGk7eTto
MFCはDocument-Viewアーキテクチャがわかりにくいとかそのパターンに合わないアプリが
作りにくいとかはあったけど、それ以外は当時のC++でよくやったと思うよ。
0495デフォルトの名無しさん
垢版 |
2023/03/04(土) 10:38:13.23ID:RFNVa0Qi
C++じゃなくてCからでもGDI+は使える
面倒だから避けるけど
0496デフォルトの名無しさん
垢版 |
2023/03/04(土) 10:40:00.46ID:RFNVa0Qi
>>490
Frameworkの出来としてはBorlandの方が完全勝利だったが
マーケティングで負けたな
0497デフォルトの名無しさん
垢版 |
2023/03/04(土) 10:41:24.02ID:RFNVa0Qi
>>491
いやいやMFCの設計者が馬鹿過ぎただけ
0498デフォルトの名無しさん
垢版 |
2023/03/04(土) 10:43:16.79ID:RFNVa0Qi
>>492-493
ほんそれ
0499デフォルトの名無しさん
垢版 |
2023/03/04(土) 10:45:47.20ID:RFNVa0Qi
>>494
どうみても糞は糞
0500デフォルトの名無しさん
垢版 |
2023/03/04(土) 10:51:57.61ID:2lfmGWRw
Document Viewが分かりにくいとか
そんなんで音を上げるやつがセンスとはよく言うよ
0505デフォルトの名無しさん
垢版 |
2023/03/06(月) 09:09:43.33ID:3SgfQ2ps
MFC ATL WTL
用途によって使い分け
ひとつのクラスライブラリに固執する必要性も必然性もない
0506デフォルトの名無しさん
垢版 |
2023/03/06(月) 14:14:58.36ID:diWxUEyJ
Smalltalkの真似はObjective-C
0508デフォルトの名無しさん
垢版 |
2023/03/07(火) 08:46:10.01ID:nXe+vnmI
それは途中参加した案件が使ってるから使わざるを得ないだけで
VSに入ってるから使わざるを得ないわけではないね
0513デフォルトの名無しさん
垢版 |
2023/03/09(木) 00:18:42.41ID:ta9TFpTT
Win32というかVC++だけど_itow_s系列って何文字書き込まれたかを返してくれるバージョンなんてないよね?
ChatGPTに聞いたら最後にint*で返してくれるオーバーロードがあるって言ってたんだが
0514デフォルトの名無しさん
垢版 |
2023/03/09(木) 04:47:01.50ID:fmJ24L2G
意味の分からない現象に遭遇したので質問させてくれ。
ここが適切かどうか微妙だけれど、もしスレが違っていたら案内いただけるとありがたい。

さて、VC6時代に作成され、プロジェクトを随時新しいVSに移行して開発しているアプリがある。
特にフレームワークは使用しておらずwin32Apiで書かれている。リソースエディタは、VS付属のリソースエディタだ。

windows10/VS2019までは問題なかったんだが、windows11/VS2022でビルドしたとたん、ダイアログのサイズが横に6ピクセル縦に2ピクセル小さくなって、中身の右と下が詰まる現象が発生した。
同じプロジェクトに新規にダイアログを加えても同じだった。
なお、この現象は、タイトルバーを追加したときだけ起こる模様。また、フォントの指定をしてもしなくても同様だ。

当たり前だが、新規にテストプロジェクトをwindows11/VS2022で作成した場合は起こらない。

なお、windwos10でビルドしたものを windows11で実行すると正しく表示される。
また、windows11でビルドしたものを windows11 で実行した場合は上記のようになるが、windows10で実行すると正しく表示される。
windwos11の互換モードをチェックすると、少しだけ改善される(詰まりがわずかに改善する)
user32.dll関連で何かあるのかな? 正直訳が分からないよ。

識者の意見を求む。
0516デフォルトの名無しさん
垢版 |
2023/03/09(木) 15:07:30.71ID:rNyfncCj
windows10/VS2019 で 新規作成し
 同環境でビルドしたものを windows11 で実行
 windows11 でビルドしたものを windows11 で実行
で差があるんかな?

_WIN32_WINNT
_WIN32_IE
WINVER
あたりの値を固定化しているのかどうか
0517514
垢版 |
2023/03/09(木) 15:19:13.60ID:fmJ24L2G
>515
え、rcファイルで定義されたダイアログを、DialogBoxParam()などで表示したらそうなって困っているという話なのですが。
もしかして、windows11の時だけ、横に6ピクセル縦に2ピクセル広げるという力業でやれということですか?w
0518514
垢版 |
2023/03/09(木) 15:22:59.99ID:fmJ24L2G
>516
プロジェクトを作成したのはVC6のようです。
以降ずっと継承しているらしく、そのプロジェクトをwindows10/2019でビルドすると問題が起きないのですが、
windows11/2022でビルドすると、実行環境がwindows11に限り現象が発生します。謎です。
バージョンは定義されています。この辺りを最新の0X0Aあたりに設定してリトライしてみます。
THX。
0520デフォルトの名無しさん
垢版 |
2023/03/09(木) 16:10:10.53ID:AnxNC5rK
ビルドしたOSのバージョンに合わせてウインドウスタイルを調整する部分があるのでは?
VS2019とVS2022の違いで言うと、ヘッダーでの #ifdef の分岐条件の違いでしょ?

windwos10でビルドしたものを windows11で実行すると正しく表示される。
 →OSがWindows10アプリとして実行しているからオプション未指定でも正常

windows11でビルドしたものを windows11 で実行した場合は上記のようになる
 →OS的にはwindwos11アプリだけどビルドとしてはWindows10アプリ、その齟齬で表示が崩れる

が、windows10で実行すると正しく表示される。
 →OS的にもビルド的にもWindows10アプリとして実行しているから問題ない

windwos11の互換モードをチェックすると、少しだけ改善される(詰まりがわずかに改善する)
 →疑似的にWindows10アプリとして実行するが、部分的に完全な互換が出来ないでいる

と言う妄想をしてみた
0522デフォルトの名無しさん
垢版 |
2023/03/09(木) 17:11:02.85ID:AnxNC5rK
>>521
そうだけど「あたりの値を固定化しているのかどうか」って書かれているから
それは「本来条件式に任せるべきところを直書きしているのでは?」と言っているのかと受け取ったけど

逆に俺は条件式に任せているから古い開発環境でうまく行ってないだけでは?と思ってるって話ね
だから自分で条件分岐を追加するか、本人が>>517で言うように力技でねじ伏せるかしかないのでは?ってこと
0524デフォルトの名無しさん
垢版 |
2023/03/09(木) 17:13:51.29ID:rNyfncCj
動作環境を固定化するのに
#ifdef _WIN32_WINNT
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x○○○
#endif
というのは、俺はやってる これの宣言の後に windows.h 等を読むように
って制限かかるけどね
0525デフォルトの名無しさん
垢版 |
2023/03/10(金) 08:43:31.77ID:rc8/VQXS
とりあえず関連するライブラリのビルドを込みで、すべてWINVERと_WIN32_WINNTの定義を0x0A00にしてやってみたが結果は変わらず。

>520
問題は、「どこで」そのOSのアプリだと認識しているのかという点ですね。
urn:schemas-microsoft-com:compatibility.v1 で、マニフェストに定義する値って、windows10も11も同じですし。
Common-Controlsの時みたいに、windows11スタイルを禁止するのになにか定義する値でも……と思ったけどみあたりませんし。

>522
とりあえずOSのバージョンを取得しているところをgrepして追いかけてみたが、そういうのはなさそう。
そもそもダイアログリソースからの作成ですしね。

問題が再現する最小のビルドを作成してるのだけれど、これがまあ大変(普通に10/2019で新規作成すると問題が起こらない)なので
問題が起こるプロジェクトを複製して、とりあえず WinMainがあるソース以外を全部削除してから順に試してみます。
泣けるぜ。

締め切りに間に合いそうになかったら、とりあえず超力ワザで。
こうやってクソソースができていくんだなぁ……
0528デフォルトの名無しさん
垢版 |
2023/03/10(金) 12:34:03.89ID:rc8/VQXS
ものすごい大変だったけど、最小化コードを作ったら原因が判明したので報告しておく。

おそらく windows2000 の頃まで遡る話だけれど、
ダイアログをセンタリングするためのクラスメソッド内で、ダイアログをセンタリングするためにSetWindowPos()じゃなくて、MoveWindow()が使われていたのが原因だった。
なんとエアロが有効な状態で、455 x 179 のダイアログを、MoveWindow()を使って、MoveWindow(100, 100, 455, 179) へと動かすと、サイズが、441 x 172 になる!
そういうもんなのかー。こんなの知らないとわかんないよ……
0529514
垢版 |
2023/03/10(金) 12:36:58.25ID:rc8/VQXS
sage忘れすまん。
てか、これ客観的に見てバグとしか思えない挙動だ。
とりあえず解決ということで。ありがとうございました。
0530514
垢版 |
2023/03/10(金) 13:06:28.99ID:rc8/VQXS
連投すまん。
確認したところ、windows11/2022で新規作成したプロジェクトでも再現します。
windows11だけなので、11でUIを一新した際に発生した、MoveWindowのバグってことで納得します。
これが仕様だとしたら、ちょっと首をひねらざるを得ないですね。
0534デフォルトの名無しさん
垢版 |
2023/03/10(金) 16:23:50.60ID:hFmnRmK3
どう対処していくかは悩ましいところだろうけど
さしあたり見つかってよかったね
0535デフォルトの名無しさん
垢版 |
2023/03/10(金) 19:20:08.44ID:iHPjFzG+
MoveWindowなんて基本的なAPIのバグを報告したら、幾らか貰えそうな気がする
ここ見た他の誰かが、もう報告してるかもねw
0536デフォルトの名無しさん
垢版 |
2023/03/10(金) 19:29:59.85ID:M/1mzCJs
それってバグなのか?
LunaやAeroの影響を受けるような前提があるんじゃないか?
0538デフォルトの名無しさん
垢版 |
2023/03/10(金) 21:52:37.44ID:ErzT9SJ9
>>513
結論から言うと「無い」ハズ。
また、最後の引数が int* 型のものは存在していないように見える。
引数の説明欄も、以下の用に4種類のみで、その中に、該当のものは存在していない。

*Parameters
-value
Number to be converted.
-buffer
Output buffer that holds the result of the conversion.
-size
Size of buffer in characters or wide characters.
-radix
The radix or numeric base to use to convert value, which must be in the range 2-36.
0539デフォルトの名無しさん
垢版 |
2023/03/11(土) 17:44:54.81ID:zdIWJF7w
ウインドウサイズの現象どこかで見たな
たしかリンカオプションの/subsystem:windows,X.YとManifestFileの組み合わせで
APIの挙動が変わるんじゃなかったかな
0543デフォルトの名無しさん
垢版 |
2023/03/13(月) 09:19:48.62ID:0cpyMYUG
ChatGPTもBingも知らないことを知らないと言わずしれっと嘘ついてくるし回答が人の目に触れてなくて識者からのコメントもないからこれを信用するやつは頭湧いてる
Qiitaの方がまだマシレベルでこれに比べるとウィキペディアは神レベル
しかしそのどれも公式ドキュメントとは比べ物にならない糞
0544デフォルトの名無しさん
垢版 |
2023/03/13(月) 11:17:06.85ID:bF2IN6wD
答えの無い物を探すのが圧倒的に苦手
今までの「自称AI」と何ら変わらん野田
0546デフォルトの名無しさん
垢版 |
2023/03/13(月) 14:09:26.73ID:P3estam5
他のプログラミングを出来るとされるAIでも、小学生でも習う円筒の体積すら、
半径の二乗を直径の二乗に間違えた間違いのコードを答えてきた。
0547デフォルトの名無しさん
垢版 |
2023/03/13(月) 14:38:05.49ID:tDVvLmFE
今のところは汎用対話AIだからね
対話力に重きを置いてる上に汎用型なので正確性に関してはかなり犠牲にされてる
結局人間もそうだけど専門型が出てきてこそだな
AIアート分野はローカルで各々が専門的に学習させられるからその辺一歩リードしてる
0549デフォルトの名無しさん
垢版 |
2023/03/14(火) 12:02:53.79ID:5+uIhtUh
プロセス間で同じファイルを読んだり書いたりしたいのですが、
一方が開いているときにはオープンに失敗させるのではなく、排他制御で待つようにしたいです。
Linuxとかだとflockという関数があるようですが、
Windowsで同じことをやるにはどういう方法になるのでしょうか?
ミューテックスを使うとなると、事前にミューテックスの名前も決める必要が出てくるのですが。
0551デフォルトの名無しさん
垢版 |
2023/03/14(火) 15:49:06.52ID:5+uIhtUh
>>550
これって、書き込むときはファイルのサイズは事前にはわからないのですが、
計算してからでないとロックはできないということなのでしょうか。
ファイルの任意の領域というよりは、ファイルそのものをロックしたいのですけど。
0552デフォルトの名無しさん
垢版 |
2023/03/14(火) 15:55:53.14ID:+K74J7cv
>ミューテックスを使うとなると、事前にミューテックスの名前も決める必要が出てくるのですが。

別にそんな必要はないでしょ
ユニーク名+ファイル名でミューテックスを使えばいい
(※ユニーク名ってのは自分しか使わない名前のことね、例えばGUIDとかだけどそこまでがっちりやる必要もないとは思う)
0553デフォルトの名無しさん
垢版 |
2023/03/14(火) 16:03:43.56ID:+K74J7cv
>>551
指定できる最大値を設定しておけばいい

> ファイルの現在の終了位置を超える領域をロックすることは、エラーではありません。
とあるから事実上ファイルそのものをロックしたのと同じ
0554デフォルトの名無しさん
垢版 |
2023/03/14(火) 16:27:54.12ID:gMQMDZBf
>プロセス間で同じファイルを読んだり書いたりしたい
問題を無闇に複雑にしてると思わないか
0555蟻人間 ◆T6xkBnTXz7B0
垢版 |
2023/03/14(火) 17:01:38.94ID:iLShrRcK
クライアント・サーバーモデルで、
サーバーだけが書き込めるとか言った制約があった方が良いかも知れません。
0556549
垢版 |
2023/03/14(火) 18:23:18.32ID:5+uIhtUh
アドバイスありがとうございます。
あるアプリから別のアプリを起動する際、
コマンドラインでは収まらないような長い情報を渡す必要があり、
ファイルに必要な情報を書いてやりとりするようにしています。
(コマンドラインにはそのファイルのパス名を渡している)

なので、ファイルを作成するアプリと、そのファイルを読み込むアプリがあり、
多重起動などのタイミングによってはアクセスがぶつかる可能性があるので、
このファイルに対する同時アクセスを制御したいという質問でした。
ミューテックスとLockFileExとどちらで実装するか、検討させていただきます。
0557デフォルトの名無しさん
垢版 |
2023/03/14(火) 18:25:17.73ID:xPBygAZk
>>554
コンパイラとリンカで同じファイルを読んだり書いたりするのも
問題を無闇に複雑にしているのか?
0560デフォルトの名無しさん
垢版 |
2023/03/14(火) 19:54:35.88ID:5+uIhtUh
>>559
それもやってみたのですが、多重起動などのタイミングによっては、
どうやっても、読み込まれずに放置されるゴミファイルができてしまいます。
テンポラリフォルダなんて気にしなければよいといえばよいのですが。
0561デフォルトの名無しさん
垢版 |
2023/03/14(火) 21:32:45.60ID:M7rmtaeA
Tempなんか使わずとも末尾PIDの名前でファイルなりを作れば重複起動その時においては名前は被らないし
引数の受け渡しとか程度の話ならオープン失敗したら数秒待って開き直せばいつか開けるだろ
書いてる間はどうせ読めても無意味なんだし
0564デフォルトの名無しさん
垢版 |
2023/03/15(水) 00:41:23.71ID:q5LCzWGQ
>>560
いや、ゴミファイルが出来る事があり得ないけどね…
その多重起動というのがどういうものか知らんけど、GetTempFileNameで上手く行かないのは、プログラムが悪いと断言できる
ま、これで駄目なら何やっても上手く行かないだろうね
0566デフォルトの名無しさん
垢版 |
2023/03/15(水) 01:02:47.82ID:fvrt0a3X
>>565
それで遊んでみようと思ったのだけど何を使用していたのかわからないなら遊べないな残念
0567デフォルトの名無しさん
垢版 |
2023/03/23(木) 01:09:16.30ID:Ao+X9Xng
>>490
正確にはMFCはMS-DOSの開発ライブラリ

だからGUIのWindowsとうまく噛み合わなかった
0568デフォルトの名無しさん
垢版 |
2023/03/23(木) 06:12:16.80ID:5IP8ya+9
Ruby では普通、外部コマンド・子プロセスの終了を待つから、実行順序は書いた順。
Process.#wait

一方、Kernel.#spawn は、終了を待たない。起動しっ放し

IO にはパイプ、ブロッキング/ノンブロッキング、同期/非同期もある
0570デフォルトの名無しさん
垢版 |
2023/03/23(木) 08:33:51.91ID:ffpb/acK
>>567
コマンドベースの開発ライブラリならSDKだろ
MFCはGUIが前提のクラスライブラリとアプリケーション構築のプラットフォームをセットにしてWin32APIをラップしたもの
0571デフォルトの名無しさん
垢版 |
2023/03/23(木) 11:05:08.93ID:AQHpwrnP
>>567
これはひどい

そんなの関係ねぇ
GUIのWindowsとうまく噛み合わなかったのは
MSVCの開発陣がC++への理解が足りなかったから
0574デフォルトの名無しさん
垢版 |
2023/03/24(金) 01:24:11.23ID:gu0zjHdj
インストーラーの無い野良EXEのAUMID(Application User Model ID)をOSに登録する方法教えてください
0575デフォルトの名無しさん
垢版 |
2023/04/03(月) 14:17:49.75ID:ZOqVhNfC
>>570
Microsoft Cがいつからあるのか知らないのか。

MFCにはGUI限定などという定義はない。

そもそもMFCはCUIのライブラリから始まっている。
0576デフォルトの名無しさん
垢版 |
2023/04/03(月) 14:20:45.40ID:ZOqVhNfC
>>570
SDKの意味すらわかってねえのか?

あんたのいうMFCは、Windows SDKが扱うWin32APIをさらにラッピングしたMFCのことだ。

あんたの言っていることは滅茶苦茶だ。
0577デフォルトの名無しさん
垢版 |
2023/04/03(月) 14:34:38.52ID:ZOqVhNfC
>>571
どうでもいいけど、マイクロソフト内でC言語とC++の混在そのものに悩んでいたのも知らないようだな

マイクロソフトはC言語派、C++派、Windowsを普及させるためにVB流用派と、試行錯誤を繰り返していた時代にMFCが誕生したと思っているなら、時期がずれていてリアルタイムでは知らなかったと言っているようなもの
0578デフォルトの名無しさん
垢版 |
2023/04/03(月) 15:01:56.44ID:amgtJnTb
MS-DOS の頃ってMSのコンパイラは統合環境だった?
C++ どころか Cコンパイラで コマンドライン上から nmake 叩いてわ
0580デフォルトの名無しさん
垢版 |
2023/04/03(月) 15:10:57.50ID:ZOqVhNfC
ウィキペディアの説明が、Microsoft C 7.0以前の話がないせいで、Microsoft CとVisual C++の区別がついていないのね。

Windows 95、98の時代は、MS-DOS 6.2とWindows 95・98(内部MS-DOS 7.0・7.1)の併存期間で、MFCはMS-DOS 6.2をターゲットとしたものと、Windows 95をターゲットとしたものがある。

まず俗称「MSVC」と呼ばれるものは、Windows 95アプリケーションの開発を意識したもので、マイクロソフト「VC」と言っているあたりからわかるようにC言語でのWindows 95アプリケーションの開発を主としている。

ここでC言語からC++の移行をマイクロソフトはやろうとして、Windows APIがオブジェクト指向ではないところで無理が生じた。

そこでMFCを大幅に強化することでC++でのアプリケーション開発をしてもらおうとしたが、すでにWindows SDKの開発の知識がある開発者は、Windows SDKでのCでもC++よいというのに慣れていて、MFCを使えというのは、それまでの知識と違っており、無駄なクラスライブラリとしか思えなかった。

MFCはWindows 3.1でも影が薄い。マルチタスクではないと言えてしまうWindowsでは、MFCのメリットなどなく、無駄にサイズが大きくて重いコードが作られるため、性能、スペックの低いパソコンではMFCを使う理由がなかった。

MFCはGUIだけで使われるものではないため、CUI環境の開発でも使われている。

MFCどころかWindows 32APIでも、画面がある前提になっているコードを書かないといけないが、実際には画面がないものを作るのにも使われる。

MFC、Visual C++、Windows SDKの話がごっちゃになって、MFCを使うにはVisual C++でMFCを利用して、MFCがWindows SDKとセットだと認識できない点は理解できる。

まあ、ウィキペディアの記事は、根拠不明の創作が多いとわかってないとだまされるよな。
0581デフォルトの名無しさん
垢版 |
2023/04/03(月) 15:18:50.66ID:lsCbs8KW
Win32がオブジェクト指向ではないって?
ハンドルを使う関数(つまり大半)はオブジェクト指向だと思うが

もしかしてオブジェクト指向とはC++やSmalltalkを使うことだと思ってるのか?
0582デフォルトの名無しさん
垢版 |
2023/04/03(月) 15:19:55.66ID:ZOqVhNfC
>>578
統合開発環境と何の関係があるのか?

Windows 95アプリケーションでも、統合開発環境は必須ではない。

画面のデザインのときだけ利用するという使い方が多かった。

Direct Xが普通に使われるようになってからは、統合開発環境は画面ごと吹っ飛ぶので、統合開発環境そのものも動かないこともあるし、統合開発環境を自分が作ったもので壊すことがあるから、Windows 95、98系では、Visual製品に期待しても、Visual統合開発環境とWindows OSのポンコツコンボは、いま思っているより意味をなしていなかったんだよ。
0583デフォルトの名無しさん
垢版 |
2023/04/03(月) 15:25:54.31ID:amgtJnTb
>>582
MFC=マクロ出力とセットになった統合環境前提って印象だったものでね
リソース周辺のアレ
0584デフォルトの名無しさん
垢版 |
2023/04/03(月) 15:26:39.12ID:p7oapVPk
>>581
そこで使われるオブジェクトとオブジェクト指向とは関係ない
アセンブラのオブジェクトファイルと同様だ
0585デフォルトの名無しさん
垢版 |
2023/04/03(月) 15:28:25.60ID:ZOqVhNfC
>>581
オブジェクト指向設計ではなかったんだよ。

C言語とC++は書き方が少し異なるだけだったので、Windows SDKではC++で書くとオブジェクト指向っぽくなり、C言語で書くとこれでいいのかという書き方で、Windows 95のアプリケーションが作れた。

ここはWindows SDKがオブジェクト指向ではないという理由がある。

APIそのものはオブジェクト指向ではなかったので、オブジェクト指向にするにはMFCを挟むという変なことをすることをしていた人間もいる。

たった数年で変わった話なので、過渡期を知らないと誤解が生じるのはわかる。 
0587デフォルトの名無しさん
垢版 |
2023/04/03(月) 15:39:17.90ID:lsCbs8KW
すまん関数名間違えた
SelectObject()だ

GetObject()はオブジェクト指向と手続き型の切り替えだね
0588デフォルトの名無しさん
垢版 |
2023/04/03(月) 15:56:54.48ID:ORXHufFt
Win32APIの基本構造そのものがイベントドリブンのメッセージ駆動なのでオブジェクト指向を土台にしている
Windowsのマルチタスクはオブジェクト指向で成り立っているだろ
0590デフォルトの名無しさん
垢版 |
2023/04/03(月) 16:48:57.33ID:WoF7SnyS
>>575
>そもそもMFCはCUIのライブラリから始まっている。

doubt
0594デフォルトの名無しさん
垢版 |
2023/04/03(月) 16:58:53.51ID:WoF7SnyS
>>585
むしろ Win(32以前も)API / Win32API がオブジェクト指向で
MFC の方がオブジェクト指向出来ていなかったんだよ
だから判ってる香具師はみんな MFC は使わなかった
使ってたのは馬鹿だけ
0595デフォルトの名無しさん
垢版 |
2023/04/03(月) 17:23:19.13ID:aHgelLEB
>>594
APIについてはその通りだが
MFCがOOPでないという主張には
賛成しかねる

下手なところがあるのは俺も認めるが
原理主義者の言いなりである必要はない
0596デフォルトの名無しさん
垢版 |
2023/04/03(月) 18:20:11.47ID:6F7Nd+C2
MFCとかけて、C++と解きます
その心は、オブジェクト指向ではあるけど、なりきれていない

これでどうでっしゃろ
0599デフォルトの名無しさん
垢版 |
2023/04/03(月) 21:57:09.76ID:pspdaLIR
GUIの無い単純なアプリならまだしも、それなりのGUIを持つアプリは
MFCを使ったほうが楽にアプリを作れるし、出来たコードも読み易い

確かに最初はMFCは取っ付き難いから、そこで挫折した人が
>>590-594みたいな事を言い出すんだろうなあ
0600デフォルトの名無しさん
垢版 |
2023/04/03(月) 23:21:42.85ID:6c3bFFXO
>>599
そんなことは無いと思うが
Win32APIをちゃんと知っていればMFCなんて使う理由が全く無いし
MFC関連のDLL何かも入れないといけないし単に開発効率がおちるだけ
実際当時Windowsアプリの仕事を結構やったけどMFCを採用していた所は少なかった
たまたまそういう場所ばかり行ってた可能性はあるがMFC何て使うなよって当時から思ってたよw
0601デフォルトの名無しさん
垢版 |
2023/04/03(月) 23:43:57.61ID:hWVK11qf
でも世の中的に勝利したのはMFCだよね
俺もATL/WTLでいいじゃんとは思ったけど
でかいライブラリも整備されてりゃそれなりに便利だからね仕方ないね

>>578
PersonalWorkBenchってのでFortranやったような気がするんだが
今ググっても全然出てこないな
0603デフォルトの名無しさん
垢版 |
2023/04/04(火) 06:32:29.81ID:sHU2LbpJ
>>600
>Win32APIをちゃんと知っていればMFCなんて使う理由が全く無いし
WindowProcに case WM_… をだらだら書かなくても済むだけでも大きな利点
>MFC関連のDLL何かも入れないといけない
ユーザー層やアプリの配布形態に応じて、必要ならMFCをStaticLibraryでリンクしてしまえば良い

>>602
>VB→.NET の流れ
社内ツールとかならともかく、それこそユーザーにVB入れさせるなんて問題外でしょ
大量のデータ処置を行うようなアプリでは処理速度も遅いし
一般販売されてるアプリでVBで作られてるものなんてある?
0605デフォルトの名無しさん
垢版 |
2023/04/04(火) 07:35:33.06ID:GxsMOWHT
>>600
>MFC関連のDLL何かも入れないといけないし単に開発効率がおちるだけ

昔Win32+CだけでDLLの追加が要らないよう頑張ってみたこともあるけど辛かったね。
C++の機能使ってしまうと結局CランタイムDLLが必要になるし。
0606デフォルトの名無しさん
垢版 |
2023/04/04(火) 10:14:15.35ID:OZYsYc62
>>601
だよな
8086しかりwindowsしかりMFCしかり
技術的に劣っていてもデファクトになると
好むと好まざるに依らずそれ関係の仕事が来る

元々BSD使いだった俺がwindowsに転向したのもメシのため
0612デフォルトの名無しさん
垢版 |
2023/04/18(火) 08:15:18.90ID:F395+kgU
Windows API インデックス
https://learn.microsoft.com/ja-jp/windows/win32/apiindex/windows-api-list

Windows API を使用すると、各バージョンに固有の機能を利用しながら、すべてのバージョンの Windows で正常に実行されるアプリケーションを開発できます。
(これは以前は Win32 API と呼ばれていたことに注意してください。
Windows API という名前は、16 ビット Windows でのルートと 64 ビット Windows でのサポートをより正確に反映しています)。
0614デフォルトの名無しさん
垢版 |
2023/04/26(水) 20:51:37.42ID:A/LukVPn
Windows11でPrintDlg使って印刷すると1度目は印刷できるけど
2度目はPrintDlg()呼ぶと反応無しになるのはなんか間違ってるのかな
レジストリ弄ってLegacyなダイアログにしとくと印刷できる、あと管理者権限でプログラム実行して
印刷も勝手にLegacyなダイアログになるので印刷できるんだけど

試しに、VC2022で新規プロジェクトで雛形ちょっと弄って試してもやっぱり
2度目のPrintDlg()呼び出しで無反応になっちゃうんだっけど
debuggerで見てもPrintDlg()呼び出しでエラーも何も出てこなくてわからない
0616デフォルトの名無しさん
垢版 |
2023/04/28(金) 10:51:05.85ID:pksuSfee
閉じてから印刷
0618蟻人間 ◆T6xkBnTXz7B0
垢版 |
2023/04/30(日) 19:59:15.10ID:Aup++SJD
Microsoftの直接的な関係者ではなく、TSF (Text Services Framework)の仕組みを知り尽くしている人を募集中。成功報酬あり。
katayama.hirofumi.mz@gmail.com
0619デフォルトの名無しさん
垢版 |
2023/04/30(日) 20:06:36.85ID:/hwg+Moy
Firefoxのにゃるるにコンタクトすれば?
あと成功報酬ではなく労働報酬あるいはコンサルタント報酬であるべきだよ
0621デフォルトの名無しさん
垢版 |
2023/04/30(日) 21:19:58.80ID:8kv4t+8E
書き込めなかった、ローマ字で検索して
にゃるる が地球にいたころ

って言うか自分で勉強検索してたら最も頻繁に出てくる
0625デフォルトの名無しさん
垢版 |
2023/05/02(火) 21:18:50.29ID:koHs32mY
WaitOnAddressってアドレスの値が比較対象と違う値に変化したら自動的に起きるっていう魔法みたいなものではないんだね
呼んだ瞬間に比較対象と違ったら即返る、同じだったら後ほど変わったとしてもWakeByAddress系で通知しなきゃ起きないっていう原始的なイベントと言うほど変わらない感じか
0627デフォルトの名無しさん
垢版 |
2023/05/03(水) 20:05:13.46ID:v7V26Uwz
>>626
その挙動は既にWaitOnAddressに組み込まれてる訳だけど
対象アドレスの値が変わったら通知とか無しに自動的に戻ることを期待していた
そうじゃなくてマニュアルでWakeByAddress呼ばなきゃいけないからイベントとそこまで変わらんなぁと
まあハンドル作らずに済む点で手軽ではあるけど
0631デフォルトの名無しさん
垢版 |
2023/05/03(水) 21:36:14.09ID:+bgC2i5O
>>630
ウィンドウ表示するコードはこれだけ

#include <windows.h>
#include <winrt/Microsoft.UI.Xaml.h>

using namespace winrt;
using namespace Microsoft::UI::Xaml;

int WINAPI wWinMain(HINSTANCE, HINSTANCE, LPWSTR, int)
{
init_apartment();
Application::Start([](auto&&) { Application(); Window window; window.Activate(); });
return 0;
}
0632デフォルトの名無しさん
垢版 |
2023/05/04(木) 00:16:09.16ID:4Uvo6CUb
ラッパー系は手をつけにくいなあ、MFCやOWLの悪夢が蘇る
便利そうに見えて、覚えることが増えるだけだったり
見えざる制約が足枷になったり、バージョン管理が面倒だったりと
やむを得ない場合は仕方ないけど
0633デフォルトの名無しさん
垢版 |
2023/05/04(木) 00:34:52.44ID:qlZGMdPb
WinRTってMS的にはWin32と同列の扱いだけど、WinRTは内部でWin32を使ってるのだろうか?
0634デフォルトの名無しさん
垢版 |
2023/05/04(木) 05:10:21.07ID:P5ZkmciJ
COMを焼き直して名前変えただけと言えばいいのか
ただCOMの利点だったIDispatchで適当な言語から扱うみたいな事ができないうんこです
0636デフォルトの名無しさん
垢版 |
2023/05/04(木) 07:33:59.15ID:Nm4VxhU5
WinRTはC#の情報ばかりでC++の情報が少ないから苦労するかも
その点Win32は情報が多いからいいね
0637デフォルトの名無しさん
垢版 |
2023/05/06(土) 10:58:22.01ID:SadRj80b
>>628
WaitOnAddressは利便性目的ではなく手軽さ+パフォーマンスが要点だからそうとも言えない
Thread立ち上げて立ち上げたスレッドがある地点まで到達するまで待ちたいみたいなちょっとしたシーンでは結構便利
パフォーマンス的にもイベント待ちに比べて1000倍近く早かったはず
0638デフォルトの名無しさん
垢版 |
2023/05/11(木) 18:47:03.56ID:FTM2vWjW
Chromeのタイトルバーに「^」の文字を上下反転させたボタンがあって押すとミニウィンドウ的なのが開くのですが、このボタンを実装したいのですがどうしたらできますか?
Chromiumのソースコード見てもどこに該当コードがあるかわかりませんでした
c言語で実装したいです
0640デフォルトの名無しさん
垢版 |
2023/05/11(木) 19:52:12.33ID:FTM2vWjW
検索してみました
ttps://github.com/search?q=repo%3Achromium%2Fchromium%20tab%20search&type=code
タブを開いた時の挙動などはTypescriptで書かれているようでした
ttps://github.com/chromium/chromium/blob/cd5fe35a69d697dd48ad34d5670d090afcdc57be/chrome/browser/resources/tab_search/app.ts#L560
既存のアプリにc/c++で手軽にタイトルバーにボタンをつけてポップアップウィンドウが開けてそこでボタンなどを選択できるような方法を知っていますか?
0642デフォルトの名無しさん
垢版 |
2023/05/16(火) 23:21:04.68ID:bBMeTJtZ
LoadLibraryに渡されたlpLibFileName引数をどうにか呼ばれたdllmainから取得する事って出来ないかな
32bitならスタックフレーム遡ってLdrLoadDllを呼んだところの第3引数のスタックのUNICODE_STRINGから手に入れる事に成功したが
64bitだとfastcallになっちゃって第4引数まではレジスタ渡しされるからこの手法も通用しなくて詰んだ
kernel32やntdllのアセンブラ決め打って取得することは出来るだろうけどそこまではしたくない
0643デフォルトの名無しさん
垢版 |
2023/05/16(火) 23:26:32.45ID:bBMeTJtZ
ちなみになぜGetModuleFileNameではダメかというとハードリンクやシンボリックリンクのときにある条件下においてlpLibFileNameとGetModuleFileNameで一致しないケースが出てくるため
0644デフォルトの名無しさん
垢版 |
2023/05/17(水) 01:27:34.09ID:LUtEOwg/
>>643
その >ある条件下 で

TCHAR PathBuffer[BUFFSIZE];
GetMappedFileName (GetCurrentProcess(), (void *)hModule_DLL, PathBuffer, BUFFSIZE);
で、lpLibFileNameと同じパス(NT形式)が返ってくる?それともエラー?

試してないので結果を教えて
0645デフォルトの名無しさん
垢版 |
2023/05/17(水) 09:18:00.69ID:J+vPZ/2W
>>644
GetMappedFileNameだとリンク先の実体ファイル名が返ってきた
ある条件下というのは既に同じリンク先のdllがロード済みの場合に違う名前のリンクからロードしようとすると同一の物と判定され先客の方のhModuleが帰ってくるためGetModuleFileNameも先にロードしたほうの名前になる
C:\mod.dll ← 実体
C:\link0.dll ← シンボリックリンク
C:\link1.dll ← シンボリックリンク

最初にC:\link0.dllをLoadLibraryした場合、以降C:\link1.dllをロードしGetModuleFileNameをしてもC:\link0.dllが帰ってくる
GetMappedFileNameだと常にC:\mod.dllだった
0646644
垢版 |
2023/05/17(水) 10:25:43.22ID:fHvb3D7j
>>645
確認ありがとう、参考になった
こみ入った環境なんだね
所望の動作でなくて残念だけど、他の手段に心当たりがない...
0648デフォルトの名無しさん
垢版 |
2023/05/18(木) 12:21:08.02ID:Wn2vmhFl
load されたときの名前からパラメータ参照ファイルな .ini ファイルの名を変えたいって感じなのかな?

>>645 のケースだと
C:\link0.dll でロードした場合には C:\link0.ini を参照し
以降 C:\link1.dllをロードした場合には C:\link1.ini を参照したい と
この場合 単に同じ実体でリンクカウントが1増えるだけであっても区別したい ということか
0649デフォルトの名無しさん
垢版 |
2023/05/18(木) 12:49:23.99ID:gc1pBp/r
DLLはメモリに直接ロードする方法もあるから
不正を正したいって意図なら無力だよ
0650デフォルトの名無しさん
垢版 |
2023/05/18(木) 23:43:11.96ID:qdON7ber
1. FindFirstFileでリンクか実体かを判定
2. VirtualAllocExで実行可領域のメモリを確保
3. ReadFileでDLLを読み込む
4. PEヘッダのIMAGE_OPTIONAL_HEADER64.ImageBase+IMAGE_SECTION_HEADER.VirtualAddressに各セクションをコピー
5. DLL内のImportLibraryを同じ手順で再帰的にロード
6. DLL_PROCESS_ATTACHとDLL_THREAD_ATTACHでDllMain呼び出し
0651デフォルトの名無しさん
垢版 |
2023/05/19(金) 14:28:26.73ID:FHSnxikS
Win32APIのGUIに著作権ってある?
自分用ならまぁ好きにしたらって程度だと思うけど
ボタンとか目コピで丸パクリしてアプリケーションとして配布したらダメなのかな
0652デフォルトの名無しさん
垢版 |
2023/05/19(金) 14:50:21.97ID:D8eITJ2Q
腐ったバナナの皮ですらアートとして認められるからな
許諾なしなら著作持ってる奴次第
0653デフォルトの名無しさん
垢版 |
2023/05/19(金) 20:19:56.03ID:c7UfD3kr
ReactOSはかなり似てるけどね
アイコンはTangoのを使ってるけど、形的なものはそっくりだな
テーマ機能があるから、訴えられても簡単に変えられるし、大した問題でもないが
0654デフォルトの名無しさん
垢版 |
2023/05/19(金) 20:39:13.36ID:OUfVoMDF
https://monolith-law.jp/corporate/design-ui-copyright-law

レイアウトや色の使い方ぐらいじゃ侵害にはならないだろうって判断と
あとは「思想又は感情を創作的に表現」したものであるかが関わる
それと著作権法に触れなくても意匠法にに触れる場合はあるとさ

>>651
複雑なデザインのボタンがあってそれを丸コピしたなら危ないけど
WinAPI程度のボタンだと「レイアウトや色の使い方」の範疇に思う
0656デフォルトの名無しさん
垢版 |
2023/05/19(金) 22:40:34.19ID:9QPyu6+L
悪目立ちしなきゃ大丈夫って感じかな
どうもありがとう
素直に使いこなせれば変なことしなくていいんだけど
0658デフォルトの名無しさん
垢版 |
2023/05/20(土) 15:28:47.38ID:GL6RWJiS
あの立体的に飛び出たボタンは誰が最初にやったかを少し調べてみたら、やっぱりMotifが最初にやった可能性が高いな
Windowsも旧Mac OSもMotifより前にリリースされてるけど、ボタンは黒い線で縁取られてるだけだからね
Motifがリリースされた1989年の直後、1990年にWindows3.0がリリースされてボタンが立体的になった
ただ、リリース直後のMotifの見た目は確認出来なかった
0659デフォルトの名無しさん
垢版 |
2023/05/21(日) 05:50:22.86ID:wNzdA/GS
誰も突っ込まないけどWin32APIのGUIってなんだよ?
0663デフォルトの名無しさん
垢版 |
2023/05/21(日) 17:54:29.28ID:BWx6f6vD
CreateWindow() のどこがGUIなんだって話なんだけど。
GUIを構成するためのAPIの一つではあるがGUIと言われても違和感しかない。
0664デフォルトの名無しさん
垢版 |
2023/05/21(日) 18:18:37.48ID:Ifo/fxoU
皆行間読んで回答してるんだよ
そういうのを読み取れずにいちいち突っかかってくるお前に違和感しかないわ
0665デフォルトの名無しさん
垢版 |
2023/05/21(日) 20:46:54.79ID:BWx6f6vD
行間が読み取れてないわけでも突っかかったわけでもなくて
気になる人いないの?って問うただけなんだけどね。
0667デフォルトの名無しさん
垢版 |
2023/05/21(日) 21:06:29.15ID:WLjUQB8s
GUIのデザインパクっていいっすか?だろ?
左上にシステムメニューと閉じるボタン
右上にアイコン化、全画面化がWindows3.1のGUIだ
0668デフォルトの名無しさん
垢版 |
2023/05/21(日) 22:29:14.29ID:5ynrmfbS
よく読めよ
ボタンのビットマップとかのGUIパーツについて言ってるだろ
GUIのメソッドについてはパクるまでもなくAPI呼び出せば自然にそうなるから
0671デフォルトの名無しさん
垢版 |
2023/05/22(月) 11:33:40.49ID:Omf9ofNg
Win32API の話ならム板
Win32API の著作権の話ならマ板
Win32APIのGUI?(ツールのデザイン)? の著作権の話なら著作権板
だろうな
遠すぎる
0672デフォルトの名無しさん
垢版 |
2023/05/22(月) 22:29:16.30ID:DLlnfzHn
うるせー馬鹿
0673デフォルトの名無しさん
垢版 |
2023/06/01(木) 18:53:13.24ID:hCiag/wO
winsqlite3って勝手に最新版のsqlite3でstdcallにしてコンパイルして上書きしても問題起こらないんかな
0674デフォルトの名無しさん
垢版 |
2023/06/06(火) 23:10:55.17ID:VJFPZJIc
テキストカーソルインジケーターをアプリに組み込みたいんですが、どこかにサンプルコードないですか?
0682デフォルトの名無しさん
垢版 |
2023/06/08(木) 21:52:05.26ID:xczGeZ8q
キャレットもそうだけど、最近なんか範囲選択表示で、半透明の矩形上に重ねるだけのエディタ多くね?
あれ見づらいんだよなぁ・・・フルスクラッチで作るなら確かに横着できて楽なんだろうけど
0683デフォルトの名無しさん
垢版 |
2023/06/08(木) 22:08:34.87ID:asQ3aAAN
エディットコントロール自作はやめたほうがいい

IMEが機能してるように見えても、音声入力や音声入力編集、読み上げで制限があるのが大半だから
キャレットもOSの強調表示機能があるし、知らないところで多機能を要求される
0684デフォルトの名無しさん
垢版 |
2023/06/09(金) 00:33:21.65ID:HaYoNzhW
自作エディットコントロールわざわざ作るときって巨大ファイル編集したいとかじゃないの
OSが勝手に後付けしたアクセシビリティ機能とか知らんでいいよ
0690デフォルトの名無しさん
垢版 |
2023/06/09(金) 21:43:38.94ID:KphHYdc7
>>686
emEditor世話になっているけど意外に保存遅いんだな
まぁ頻繁に保存するような用途じゃないんだけど

そういや日本語フォント最速表示って今なんなんだろう、DirectWrite?
アルファベットなら予めテクスチャに全部落とせばいいんだろうけど
0691デフォルトの名無しさん
垢版 |
2023/06/09(金) 22:38:21.40ID:9anYwuVY
>>686,688はフリーじゃない

>>690
>意外に保存遅い
emEditorは今でも活発に最適化に努めてるから最新ではどうなのか不明

飽くなき高速化への挑戦! 「EmEditor」はマルチスレッド・SIMD命令・仮想メモリをフルに使って進化
https://forest.watch.impress.co.jp/docs/special/1483714.html

freetypeが早いけどDWはOSがキャッシュしてくれる(ctfmon.exe)のが有利
harfbuzzもラスタライズしてくれるけどbitmapヒンティング切捨て、速度は不明
GDIはカラー絵文字ないから新規では厳しい

古い記事だけど 2017-05-21 GDI vs DirectWrite vs FreeType
https://i.imgur.com/8nDxIa3.png
https://silight.ハテナblog.jp/entry/2017/05/21/220505

TATEditorはfreetype (本来の速度より遅い気がする)
MeryはDW選択可能

今のnotepadはDWだと思うけどパラメータのせいなのか、同じ日本語フォントでもMeryの方がキレイ
一度気が付くと気になって仕方ない
0692デフォルトの名無しさん
垢版 |
2023/06/10(土) 16:44:39.28ID:Yvl44ooC
昔はメモ帳やらエディットボックスが32KBだかしか開けなかったせいでちょっと長いテキスト表示したいなら自作するしかなかったし
今のエディットボックスも使いやすいというわけでもないし
0697デフォルトの名無しさん
垢版 |
2023/06/13(火) 16:26:23.21ID:u7AmJNUj
>>693
むしろエディタには完全自作しかない
エディタにあるような複雑な禁則事項はエディトボックスでは扱えない
0698デフォルトの名無しさん
垢版 |
2023/06/14(水) 08:13:22.34ID:EjsNogN3
高校生の頃からHTML直打ち自前サイト始めたから、秀丸にはお世話になったわw
0699デフォルトの名無しさん
垢版 |
2023/06/14(水) 23:13:37.25ID:8tGzhu5T
>>691
690だけど遅レスですいません、詳しくありがとうございます
社内で使う遊びツールに活かさせて頂きます

というかここまで詳しい人ってもう
0700デフォルトの名無しさん
垢版 |
2023/06/19(月) 14:24:30.00ID:x2sgiUfE
FindWindowで他プロセスの生存確認を行っているのですが、その該当プロセスが死んではないものの
応答無しレベルで重い場合にFindWindowがNULLを返すことはあるのでしょうか?
ここでは他プロセスのトップウィンドウを検索しています。

該当プロセスが本当に死んでるなら当然でしょうが、それ以外でNULLを返す可能性があるならば
対策をしようと思いつつも、そんな可能性がないなら無駄なのでご存じの方よろしくお願いいたします。

さっとググった感じでは、他プロセスの子ウィンドウを検索する場合は問題ありのような感じですが、
本件はそうではないですしほとんどの場合NULLではなく正常にウィンドウハンドルを返してくれています。
0703デフォルトの名無しさん
垢版 |
2023/06/19(月) 16:12:12.17ID:x2sgiUfE
>>701
その通りなのでその辺の修正を視野に入れていますが、中々再現性が薄いのもあり、そもそもの仕様として
どうなのかなという確認の意味で質問しました。

>>702
どうもすみません。説明に抜けというか間違いがありました。
生存確認だけではなく、WM_APP+nメッセージも送るためウィンドウハンドルが必要となります。
(実際、死んでいるなら起動処理も入れていますが)

要はプロセス間通信をしているのですが、データ自体はファイルマッピングによる転送、転送のトリガー通知を
メッセージ送信にしています。
0704デフォルトの名無しさん
垢版 |
2023/06/20(火) 13:30:15.15ID:Dvlv0UV+
FindWindowで見つからないならHWNDも取れないんだし居ない者でいんじゃね
つかそこ悩むことじゃなくね
0706デフォルトの名無しさん
垢版 |
2023/06/20(火) 16:49:06.07ID:Dvlv0UV+
まずプロセス間通信するなら相手が居ない場合を必ず想定すべきでFindWindowの1度の呼び出しで一喜一憂すべきではない
プロセスの起動し直しも前提に数秒おきのFindWindow呼び出しポーリングはしたっていいと思うよ
メインウィンドウなんて高々数十個だしそんな負荷にならない
0707デフォルトの名無しさん
垢版 |
2023/06/20(火) 20:40:34.74ID:1lEw2nNB
該当プロセスを他プロセスから起動してたりするとどうなんだろ
あとFindWindowじゃなくてEnumWindowsなら拾えないことって無い印象だなぁ、ハンドルも取れるし

あまり関係ないけど、うちのクソシステムだとブラウザからサーバー上にあるエクセル開くんだけど、
Workbooksで拾えたり拾えなかったりするのよね(ExcelVBA)
0708デフォルトの名無しさん
垢版 |
2023/06/21(水) 03:06:59.92ID:xVHig5c/
>>704
複数起動しないようmutexかけてるので、プロセス生きてるにもかかわらずFindWindowがNULL返すのなら好ましくないなと。

>>705
古いよ。保守だけで毎月3桁くれるんだからおいしい。

>>706
とりあえず見つからないならエラーも取得しつつ数秒間再試行かけてみました。
これで様子を見ます。

>>707
該当プロセスは他のプロセスからも起動したりテスト作業で自分で起動したりしてますが、一応拾えてますね。
0709デフォルトの名無しさん
垢版 |
2023/06/21(水) 08:17:17.70ID:HzwHqkRi
mutex の排他って CreateWindow する前 & メッセージループする前だから
プロセスは存在してるけど、window は無いって 中間的な状態じゃね?
0715デフォルトの名無しさん
垢版 |
2023/07/23(日) 16:38:12.26ID:eEbrANA6
POSIXのopenatとかをWindowsで実装したいんだけど、
NtCreateFileを使えとは見るんだけど、
実際のコードは見たなことない。

gnulibから実装した方がいいのかな?
0716デフォルトの名無しさん
垢版 |
2023/07/24(月) 12:54:52.49ID:IGsOjAN4
不特定多数に文字だけで意思疎通するには答えやすい尋ね方というのがあると思うが、そんなことよりスクリーンセーバー作ろうぜ
0718デフォルトの名無しさん
垢版 |
2023/08/04(金) 11:13:07.90ID:2Yu2Iz7N
IME のオンとオフの実装で以前は
ImmGetContext
ImmSetOpenStatus
ImmReleaseContext
の3点セットで完全にオンとオフが機能していたように記憶しているのですが
今のWindowsでは機能しないことがあります(Windows 11 Home 22H2 OS Build 22621.2070)
この原因や解決策をわかる方がいたら教えてほしいです
Windows の公式サンプルでもこの3点セットでオンオフを実装しています
github.com/microsoft/Windows-classic-samples/blob/ac06e54a15e9a62443e400fffff190fb978ea586/Samples/Win7Samples/winui/input/ime/fullime/Main.C#L237
0721デフォルトの名無しさん
垢版 |
2023/08/14(月) 19:56:12.96ID:53r0CZc5
y=f(x)のグラフを描こうとした場合、GDIのLineTo()で書けますが
グラフとx軸の間の領域を背景とは異なる色で描画しているアプリを
見かけることがあります。
ベタにやろうとすると(x,0)から(x,f(x))までを別のペンでLineToすれば
できそうですが、それだとあまりにも遅そうなんでどのようにするのが
一般的なんでしょうか?
0722デフォルトの名無しさん
垢版 |
2023/08/14(月) 19:58:40.11ID:KSpEuPpD
polygon
0723デフォルトの名無しさん
垢版 |
2023/08/14(月) 23:17:07.87ID:Vf3oM49A
>>721
グラフを描画するのであれば、さすがにそういうのに向いたプログラミング言語を使ったほうが
本質的な所に時間を使えるんじゃないか?
0724デフォルトの名無しさん
垢版 |
2023/08/14(月) 23:53:10.89ID:hsUNKBWX
(分かりやすく)グラフが丁度収まる矩形サイズの描画メモリをCreateDIBSectionとかで確保して
掛け算や条件文をなるべく使わずに、直接メモリを塗りたい色で書き換えて、
最後にその描画メモリをバックバッファへ転送する、とか
0725デフォルトの名無しさん
垢版 |
2023/08/15(火) 08:10:50.28ID:eu+UdA0l
PathTo
0726デフォルトの名無しさん
垢版 |
2023/08/15(火) 10:10:52.28ID:whQn6DUa
データ左端,Y軸下端 to データ左端,Y値 to データX値,Y値 to
... to データ右端,Y値 to データ右端,Y軸下端 (to データ左端,Y軸下端)
0728デフォルトの名無しさん
垢版 |
2023/08/15(火) 11:44:42.91ID:5h6JYYPu
自分で線描画してメモリDCでダブルバッファするか
既製のチャートコントロールを使う
jもしくはavascriptにグラフ描画のは沢山あるからそ!をwebview2か何かで表示する
0730デフォルトの名無しさん
垢版 |
2023/08/16(水) 10:30:08.97ID:tgyEZLGb
>jもしくはavascript

斬新ですね
0731デフォルトの名無しさん
垢版 |
2023/09/23(土) 00:28:12.62ID:aQUNS12d
メール関係のライブラリを知っていたら教えてください。
Windowsで使えるライブラリってないのでしょうか。
0732デフォルトの名無しさん
垢版 |
2023/09/23(土) 04:00:25.45ID:kn75UD+k
まああるかないかで答えればあるんだけどさ
メール関係って言われても色んな技術の集合だしなあ
その質問をこのスレで聞いちまう所がまずセンスないよね
0734デフォルトの名無しさん
垢版 |
2023/09/23(土) 14:43:48.51ID:60UGXAh5
送受信はたいしたことないけど
お行儀悪いのを忖度して可視化するのがとても大変
0737デフォルトの名無しさん
垢版 |
2023/09/24(日) 09:35:27.98ID:2YTVyUlC
EHLO
0739デフォルトの名無しさん
垢版 |
2023/09/25(月) 13:09:43.15ID:RmxLVxNP
ERO
0740デフォルトの名無しさん
垢版 |
2023/09/26(火) 13:29:13.68ID:6+Zop4bX
GetTempPathで取得できるフォルダ(AppData\Local\Temp)の中を見ると、
固定名と思われるサブフォルダを作っているアプリが結構あるのですが、
こういうアプリって、その固定名のサブフォルダが他のアプリと競合したり、
同じ名前のファイルがすでに存在していてサブフォルダを作るのに失敗したりするケースは、
ちゃんと想定しているものなんですか?
0742デフォルトの名無しさん
垢版 |
2023/09/26(火) 16:13:27.26ID:6+Zop4bX
>>741
想定していないアプリなんかは、事前に同じ名前の空ファイルでも置いておけば、
テンポラリフォルダを作れなくて正しく動かなくなってしまうということですよね?
0743デフォルトの名無しさん
垢版 |
2023/09/26(火) 16:59:03.55ID:mqYR7ljA
同名のファイルが存在してサブフォルダが作れずに阻害された後
どうなるかも作り手次第だろうね
名前を変えて悪あがきするか、エラー報告して終わるか、だんまりするか・・・
0744デフォルトの名無しさん
垢版 |
2023/09/26(火) 19:44:54.79ID:a3/CUfz+
単なるファイルのコピーすら気を付けても穴だらけだしな
その時点の知識で最良を目指すしかない
0745デフォルトの名無しさん
垢版 |
2023/09/27(水) 02:22:24.50ID:5xG4BOfj
>>740
そもそもTempは一時的なフォルダでしょ
本アプリは上書きで使っていくだけだから影響はないでしょ
キャッシュや恒久的に使用するデータをそこに保存している場合は不具合のもとだろうけど
データ検証しない場合はエラー吐いて落ちるだけじゃね?
0746デフォルトの名無しさん
垢版 |
2023/09/27(水) 08:45:50.87ID:KtsI0JaQ
Tempフォルダの中身は削除されても文句言えない物だから
なんなら同名あったら問答無用で削除して自分用作るすらあると思うわ
0747デフォルトの名無しさん
垢版 |
2023/09/27(水) 11:42:51.73ID:OOPn+kCl
その通り
既存の同名があって作成者が自分じゃなければ消して新しく同名で造れば良い
0748デフォルトの名無しさん
垢版 |
2023/09/27(水) 11:55:22.18ID:rbbJx+dJ
>>740
勝手に数字をつけて存在しない名前を探してくれるAPIがあっただろ
数字は16ビットなので65536個全部あったらだめだが
0750740
垢版 |
2023/09/27(水) 12:37:44.20ID:jK1ZOC3S
みなさんありがとうございます。

>>745-748
テンポラリファイルではなく、固定名のサブフォルダを作るアプリに対する疑問でした。
フォルダ上に同名のファイルがあったら、その名前のサブフォルダは作れないですし。

確かにそれを言い出したら、インストール時も、
Program Filesの中に同名のファイルがあったらどうするんだとか出てきますが。
0753デフォルトの名無しさん
垢版 |
2023/09/27(水) 15:25:13.52ID:CB93ywr3
>>750
テンポラリファイルではなく、固定名のサブフォルダを作る場合は
C:\Users\ユーザー名\AppData\Local\会社名
で作るのが一般的では?(暗黙のルール?)

個人で作ってるならアプリ名を元に他と被らないようにするとか
0754デフォルトの名無しさん
垢版 |
2023/09/27(水) 23:12:54.83ID:zQBl5fyt
その為のレジストリなんじゃないのか?
キーは基本的に会社名含めてるから被らないし、ファイルを作成して消耗するより楽だろ
0755デフォルトの名無しさん
垢版 |
2023/09/28(木) 06:29:56.08ID:wsjwbbNA
テンポラリの作業用にレジストリ使うの?
ファイル造る方が楽
0765デフォルトの名無しさん
垢版 |
2023/10/07(土) 15:05:12.07ID:9HknARLB
>>750
>確かにそれを言い出したら、インストール時も、
>Program Filesの中に同名のファイルがあったらどうするんだとか出てきますが。
Windows Installerは排他実行だった気がする。
0766デフォルトの名無しさん
垢版 |
2023/10/07(土) 15:05:22.61ID:9HknARLB
>>750
>確かにそれを言い出したら、インストール時も、
>Program Filesの中に同名のファイルがあったらどうするんだとか出てきますが。
Windows Installerは排他実行だった気がする。
0768デフォルトの名無しさん
垢版 |
2023/10/09(月) 08:17:21.60ID:2tIVtmSa
リソースの作成は、片山さんのを使っているのですか?
0770デフォルトの名無しさん
垢版 |
2023/12/05(火) 09:32:43.89ID:wrsiK2xx
MoveFileExにはMOVEFILE_WRITE_THROUGHというフラグがあって、
直後にディスクへフラッシュすることができるけど、
これと同じことをCopyFileで行うことはできますか?
0772デフォルトの名無しさん
垢版 |
2023/12/05(火) 13:17:40.41ID:wrsiK2xx
>>771
Microsoft公式で、こんな苦し紛れな方法が紹介されているんですね。
MoveFileExはNT3.1以降の関数なのに。
0774デフォルトの名無しさん
垢版 |
2023/12/05(火) 21:13:57.13ID:rxI6O073
タイムスタンプが1970年だかのファイルを仮置きして別名でコピーしたら挿げ替え
電源断が怖いなら挿げ替え部分だけアトミックに作ればいい
0775デフォルトの名無しさん
垢版 |
2023/12/05(火) 22:40:24.43ID:82k65TSZ
>>774
>電源断が怖いなら挿げ替え部分だけアトミックに作ればいい

この部分は具体的にセオリー的なやり方があるのですか?
挿げ替えで思い当たるReplaceFileはアトミックか分かりませんでした。
0776デフォルトの名無しさん
垢版 |
2023/12/06(水) 11:02:51.03ID:swAla//2
CopyFileではいったんテンポラリファイルにコピーして、
それをMoveFileExで正しいファイル名に変更するとかやれば、
ちゃんと書き込まれる可能性は高くなるんですかね
0780デフォルトの名無しさん
垢版 |
2024/01/02(火) 18:23:35.28ID:fgzxSMPt
RtlReAllocateHeap(GetProcessHeap(), 0, lpMem, dwBytes)
これをそこそこの頻度でやってると特定回数目にクラッシュしてしまうんだけどどういうことなのだろうか
よくある戻り値null未チェックとかそういう事ではなく上記関数内で落ちるんだよね
lpMemも間違いなく生きてるメモリなのは確認済みでdwBytesも不自然な値ではない

呼び出し方が悪いのかと思ってmalloc、reallocに変えてみてもやはり同様の場所でクラッシュしてしまう
0782デフォルトの名無しさん
垢版 |
2024/01/02(火) 23:51:50.03ID:fgzxSMPt
>>781
WindowsのreallocはHeapReAllocのラッパーでHeapReAllocの実態はRtlReAllocateHeapへのリンクに過ぎない訳だが
0784デフォルトの名無しさん
垢版 |
2024/01/03(水) 01:02:21.99ID:l1Q27XPY
正月ボケを晒すスレ
0787デフォルトの名無しさん
垢版 |
2024/01/04(木) 19:03:00.23ID:IQKtoxOL
特定回数でクラッシュするなのがわかってるなら
アドレスがどう変化した時にクラッシュするとかわかりそうなもんだ
0788デフォルトの名無しさん
垢版 |
2024/01/04(木) 22:30:57.77ID:ZPN5xQR2
mallocで大きなメモリを取得して、その領域から切り出すalloc関数などを作って差し替えてデバッグするとか?
組み込み系で良くやるけどね。
0790デフォルトの名無しさん
垢版 |
2024/01/04(木) 22:48:53.63ID:IQKtoxOL
>>786
それはおかしいだろ
(アドレスが変わる場合は)freeする前に新しいアドレスに内容コピーしないといかんから
0793デフォルトの名無しさん
垢版 |
2024/01/23(火) 16:49:29.22ID:SUJHX/By
ファイルパスなんかはカーネルが結局UNICODE_STRINGとして扱うからwchar版の方がパフォーマンス良いけどadvapi32のレジストリ系関数はどうなんだろうか?
0794デフォルトの名無しさん
垢版 |
2024/01/26(金) 12:12:36.19ID:h4bsjzTE
WM_MOUSEFIRSTからWM_MOUSELASTのメッセージって、
これから追加されるメッセージもLPARAMはすべてマウス位置のクライアント座標が入る、という約束はありますか?
0795デフォルトの名無しさん
垢版 |
2024/02/21(水) 15:57:22.07ID:jTOh+ue+
Spy++のメッセージウィンドウには、「S」や「P」の文字が表示されていて、
それがSendで送られたのかPostで送られたのかがわかるようになっていますが、
これと同じ区別を、自身のメッセージハンドラ上で行うことはできるのでしょうか

InSendMessageというAPIは見つけたのですが、
Spy++で「S」と表示されるものでも0が返ってきてしまいました
0797デフォルトの名無しさん
垢版 |
2024/02/23(金) 16:31:44.91ID:JzCbi9fb
InSendMessageは別のスレッドからSendMessageされたかを判断する、と説明があるから、
単純にSendMessage呼び出しを判定するものではなさそう

同一スレッドからのSendMessageの呼び出し判定は、ウィンドウプロシジャのコールスタック辿って
SendMessageのエントリポイントと比較するとか、何か追加で頑張る必要がありそう
0799デフォルトの名無しさん
垢版 |
2024/02/24(土) 00:12:34.16ID:qqiEO45x
内部でIsPostMsgとかフラグ作ってDispatchMessage()を呼ぶ時に1にする終わったらゼロにする
0801デフォルトの名無しさん
垢版 |
2024/02/24(土) 13:03:44.44ID:qqiEO45x
Postでキューに入ったのを取り出して呼ばれるのはそこだけでしょう
Sendでは直接呼ばれる
もしウィンドウプロシージャの中からSendしてたらこれは使えない
0804デフォルトの名無しさん
垢版 |
2024/02/25(日) 11:17:44.56ID:GDczOUha
>>796-803
ありがとうございます
Spy++はメッセージをフックしているから、SendとPostの区別もできるということなんですかね
0805デフォルトの名無しさん
垢版 |
2024/04/29(月) 03:35:32.42ID:xgq67JZI
intから__int64へ
0807デフォルトの名無しさん
垢版 |
2024/05/08(水) 06:59:53.68ID:CU7bUsfh
自作アプリに対してSendMessageでWM_APP送ってるけど送れてない(受信できていない)ことがあったので
送信側でGetLastErrorしたら
> 0x05:アクセスが拒否されました。
が取れました。

ここによると
ttps://learn.microsoft.com/ja-jp/windows/win32/api/winuser/nf-winuser-sendmessage
> メッセージが UIPI によってブロックされると、 GetLastError で取得された最後のエラーは 5 (アクセス拒否) に設定されます。

これに該当してる?のか他の原因でアクセス拒否されているのか分からないけど、
受け側のアプリはずっと起動したままで直前までメッセージ受信できていたことと、
その後もアプリが死んでいるようには見えず操作できるし動作ログも残るため、
ただただWM_APPメッセージ受信のみ(?)できなくなっているような状況です。

ここで質問ですが、どういう時に急にメッセージ受信できなくなるのか、エスパーお願いします。

今後の対策としては受信側でChangeWindowMessageFilterを使ってWM_APPを許可すれば良さそうだと当たりは付けていますが・・
権限レベルを弄ったりということは一切していないので、問題の発動条件が知りたいです。
0809デフォルトの名無しさん
垢版 |
2024/05/08(水) 21:47:14.20ID:5PSVmBb2
んで、この手のシステムからの意図しない介入問題が起きた場合は、
原則プロセスの再作成で解決するしかない
0810デフォルトの名無しさん
垢版 |
2024/05/08(水) 21:51:37.73ID:5PSVmBb2
これはLow Level Hookが外れた時の対処と同じ
恐らくSendMessageの処理が規定時間以内に終わらなかったとかで適当に介入してるんだろう
知らんけど
0812デフォルトの名無しさん
垢版 |
2024/05/09(木) 11:45:17.50ID:LBnBOAOP
>>808
再現性ないと言っていいのか、手元では再現できず
エラーが出た環境でも普段は問題出てなくて、たまたま問題が出たのに気付いてログを漁ってエラーコードが分かり、
過去ログも遡ると半月前にも一度エラーが出ていたのは分かりました

この問題が出た環境は24時間PC&アプリ起動しっぱなしということらしく、その時点で
何となくお察し感がなくもないですが原因ははっきりさせたいなと

>>809-810
受信側は一切メッセージの受信を感知していない(ログに全く残らない)ようなので
規定時間以内に終わっていないというようなことではないとは思いますが、
何かしらの原因で適当に介入されている感はすごくあります

まあ適当に〜されたとしても、はっきりしたいところです
0813デフォルトの名無しさん
垢版 |
2024/05/09(木) 15:19:14.25ID:HEWeaKRP
断片化回避のためにSetFilePointer -> SetEndOfFile -> SetFilePointerサンドイッチってもう古いやり方?
.NETのFileIO実装がSetFileInformationByHandle(FILE_ALLOCATION_INFO)でやってるんだが
0815デフォルトの名無しさん
垢版 |
2024/05/09(木) 21:40:33.69ID:UHyVEDy6
>>811
ちょっと調べてはみたけどstackoverflowでも迷宮入りしててだめだったんよね
SYSTEMプロセスから送れば拒否られないとは思うが
確実にプロセス間通信をしたかったらメッセージよりは名前付きパイプが無難だろうな
0816デフォルトの名無しさん
垢版 |
2024/05/10(金) 23:35:02.72ID:r04xuHSU
>>815
迷宮入りまで調べてくれてたんですね

確かにパイプが無難です
今さらコイツを修正するには作り直しレベルなのでもう無理ですがw

とりあえずしばらく放置して色々な環境でログ収集して情報整理します
ありがとうございました
0817デフォルトの名無しさん
垢版 |
2024/05/10(金) 23:49:50.70ID:irdjP1bw
>>807
再現性はともかくとして、SendMessageが途中から拒否られる事象がOSのどのバージョンで発生したか書いといてくれると嬉しい
0818デフォルトの名無しさん
垢版 |
2024/05/11(土) 03:02:04.26ID:7XNHipLd
>>817
どうもすみません
Windows11 home 23H2です

ちょうど今おかしな環境のPCがまたおかしくなっているようなので調べていましたが、
受信側プロセスが管理者特権に変更されているようで、これが原因ですね

送信側は管理者特権は付与されていませんが、送信側プロセスから受信側プロセスを
起動していますから、最初は特権が付与されていないはず・・・

ということでどちらのプロセスも再起動させたところ、どちらも標準ユーザーになっていました
explorerからexeプロパティを見ても管理者権限はチェックされていないようです

意図せず途中で管理者特権が付与される可能性はあるのでしょうか?
(プログラム的にはそんなことしているつもりはもちろん無いですが)
0819デフォルトの名無しさん
垢版 |
2024/05/11(土) 12:31:06.19ID:PynvVCIt
無意識にそんな特権付与されたら怖すぎるがなw
システムが一時的に特殊な状態にしてるんじゃないの
0820デフォルトの名無しさん
垢版 |
2024/05/13(月) 00:51:53.26ID:UH9hVJYb
APIの先で起動されるスレッド(OSが起動する)が管理者特権付きで
それがアクティブな瞬間はプロセスが管理者特権付きに見えて、
そんなタイミングのプロセスに一般ユーザがメッセージ送ると、
管理者様に対して頭が高いぞってアクセスデナイド。
とか想像してみた。
0821デフォルトの名無しさん
垢版 |
2024/05/13(月) 02:44:07.73ID:eZXBgDRS
818です

ログを見ると、一度メッセージ受信できなくなるとずっと受信できていないようです
管理者特権が付いているのを確認したのはタスクマネージャでの目視ですが、
見たところずっと特権がついているのでタイミングの問題ではなく、何かしらの拍子で特権がついたまま
という感じですね

今のところ、24時間起動したまま使い続けていますがあれから特権はついていません

特権を必要とするようなコードを書いたことない(つもり)なので、原因にたどり着くのは中々難しい状況です
例えば、どんなことをすると特権が付与される(UIもなく勝手に?)のでしょう?
0822デフォルトの名無しさん
垢版 |
2024/05/16(木) 19:26:12.96ID:s6fDlAb8
心当たりが無いなら今月のCVE-2024-30051だとか特権の昇格の脆弱性のどれかに引っかかってる可能性あり
0823デフォルトの名無しさん
垢版 |
2024/05/18(土) 14:21:00.21ID:u20XKbPO
>>813
自己レスだけどSetFileInformationByHandle(hFile, FileAllocationInfo...)でやるとサイズが小さい場合にMFT内にデータ埋め込んで完結する場合でも1セクタ確保されてしまうようなので旧来の方法でやる方が無難だった
0824デフォルトの名無しさん
垢版 |
2024/05/21(火) 10:59:49.66ID:CZsnB0Ll
>>813
埋め込みサイズ上限を上回る新規ファイルを作る場合ならハンドル作成時にアロケーションサイズも同時指定する方が良さそう
0825デフォルトの名無しさん
垢版 |
2024/05/25(土) 11:34:53.77ID:IsAA9ZVh
>>807,821
疑ってすまないけど、本当に隅から隅まで自分で書いたプログラムなのか?
OSSをちょっと弄った程度で自作アプリと言っているだけなんじゃないか?
0826デフォルトの名無しさん
垢版 |
2024/05/29(水) 17:30:16.76ID:5SDO0AId
リストビューで範囲選択したときの青い枠の色や内部の半透明な色の値は、APIで取得できるのでしょうか
0829デフォルトの名無しさん
垢版 |
2024/05/29(水) 18:52:44.95ID:uKjwQH9U
この辺りlinuxやMacのWMとかと違って有る程度の値の取得変更できるのはWindowsの強みだったよな
0830デフォルトの名無しさん
垢版 |
2024/05/29(水) 19:04:09.64ID:5SDO0AId
>>828
GetSysColorはRGBの値で、透明度の値まで持ったものを返すようには見えなかったのですが、
具体的にどのパラメータを指定するのでしょうか?
0831デフォルトの名無しさん
垢版 |
2024/05/29(水) 19:05:11.69ID:1pytebYy
他スレでスクリーンショットのマルチポストがあるけど、加えてコントロールの色を取得か

AIに食わせるUI Automation学習データを整備してるのかな
0835デフォルトの名無しさん
垢版 |
2024/05/30(木) 21:44:25.79ID:As0oayev
>>834
どのWindowsでも画面設定とか関係なくこの青なら直値で計算してもいいけど、
なにかのAPIで取得できるなら合わせておきたいです
0836デフォルトの名無しさん
垢版 |
2024/05/31(金) 08:56:42.01ID:UXfkVjV8
稀によく自分で手を動かすのと人に訊く比率がバグってる奴がいるよな
本人は自覚があるから分散してるつもりだろうけど一回そう思われたら終わりなんだよ
職場で塩対応されてるんだろうな
レスを投稿する


ニューススポーツなんでも実況