diff --git a/.drp_config b/.drp_config index e727b95..5f88253 100644 --- a/.drp_config +++ b/.drp_config @@ -3,7 +3,7 @@ n } PORTFOLIO_LINK:{ -HAHA NOT REAL LINK +djkato.net } EXCLUDE_CHARACTERS_LIST:{ diff --git a/Cargo.lock b/Cargo.lock index 8aa0e86..3c64e0a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7,6 +7,7 @@ name = "DRP_Creative" version = "0.1.1" dependencies = [ "discord-rich-presence", + "lazy_static", "regex", "tray-item", "windows", @@ -509,6 +510,12 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + [[package]] name = "libappindicator" version = "0.7.1" diff --git a/Cargo.toml b/Cargo.toml index f9a5098..019d5e4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,7 @@ author = "https://djkato.net" discord-rich-presence = "0.2.2" regex = "1.6.0" tray-item = "0.7.0" +lazy_static = "1.4.0" [dependencies.windows] version = "0.39.0" @@ -20,5 +21,6 @@ features = [ "Win32_System_Threading", "Win32_UI_WindowsAndMessaging", ] + [target.'cfg(windows)'.build-dependencies] windres = "0.2.2" \ No newline at end of file diff --git a/README.md b/README.md index bcac3ab..04a589a 100644 --- a/README.md +++ b/README.md @@ -20,16 +20,22 @@ If you want to revert these settings, you can go to the folder you put the exe i **Full support:** - Cinema 4D - Adobe After Effects +- Adobe Illustrator +- Adobe Photoshop +- Adobe Premiere Pro - Autodesk Maya - -**Partial support:** *(meaning it shows up on Discord, but doesn't display the project name)* +- Autodesk 3Ds Max - Davinci Resolve -- Illustrator -- Photoshop - Isotropix Clarisse -- Marvelous Designer - Calvary - Ableton - FL Studio -- Autodesk 3Ds Max -- Adobe Premiere Pro +- Blender + +**Partial support:** *(meaning it shows up on Discord, but doesn't display the project name)* +- Marvelous Designer ¹* +- Substance Designer ¹* +- Substance Painter ¹* +- Adobe Audition ¹* + +¹*sadly not doable, project name not in proces window title. They will show up though, just with default project name* \ No newline at end of file diff --git a/processes.txt b/processes.txt index 9839c1c..a2d0be9 100644 Binary files a/processes.txt and b/processes.txt differ diff --git a/program icons/Audition.svg b/program icons/Audition.svg new file mode 100644 index 0000000..38104e9 --- /dev/null +++ b/program icons/Audition.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + diff --git a/program icons/Audition@3x.png b/program icons/Audition@3x.png new file mode 100644 index 0000000..d401f3e Binary files /dev/null and b/program icons/Audition@3x.png differ diff --git a/program icons/Blender@3x.png b/program icons/Blender@3x.png new file mode 100644 index 0000000..5314b4f Binary files /dev/null and b/program icons/Blender@3x.png differ diff --git a/program icons/Blender_logo_no_text.ai b/program icons/Blender_logo_no_text.ai new file mode 100644 index 0000000..9d33231 --- /dev/null +++ b/program icons/Blender_logo_no_text.ai @@ -0,0 +1,326 @@ +%PDF-1.6 % +1 0 obj <>/OCGs[18 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + Adobe Illustrator 26.0 (Windows) + 2022-09-09T21:35+02:00 + 2022-09-09T21:35+02:00 + 2022-09-09T21:35+02:00 + + + + 256 + 208 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA0AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq8u88/mTepeTaXor+jHCxSe8Xd2YbMqfygHv18M5DtbtyYkceI0Bzl+p6n szseJiMmUXfIfred3F1c3MhluZnnlPV5GLsfpapzl55JTNyJJ83ooQjEVEUEVpmu6vpcoksLuSAg 14qx4Hv8SH4T9Iy7T6vLhNwkR+O5qzaXHlFTiC9a8m/mLY60Es77ja6n0ArSOU/5BPQ/5J+iudp2 Z23DPUJ+nJ9h936nku0eyJYfVD1Q+0e/9bMc3rpnYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY 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 7sVdirsVdirsVf/Z + + + + application/pdf + + + Blender_logo_no_text + + + 1 + False + False + + 229.137931 + 229.137931 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + Document + AIRobin + xmp.did:b3efc266-c4b2-4c47-a87b-ef45682dce18 + uuid:8430b06c-41b9-493f-b74e-39d34f277843 + xmp.did:b3efc266-c4b2-4c47-a87b-ef45682dce18 + proof:pdf + + + + + saved + xmp.iid:b3efc266-c4b2-4c47-a87b-ef45682dce18 + 2022-09-09T21:34:58+02:00 + Adobe Illustrator 26.0 (Windows) + / + + + + Adobe PDF library 16.03 + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 3 0 obj <> endobj 5 0 obj <>/Resources<>/Properties<>>>/Thumb 22 0 R/TrimBox[0.0 0.0 229.138 229.138]/Type/Page>> endobj 20 0 obj <>stream +HTM7 u +]dQ?$deF9@#qq;@Ο .$||,>}l?Jy?|}H_?ʗo?)סӋȪ*G9ih.UkgKjVG,cU)c>FJ/Sܷ8W}\۬W1}Z$+Lyw%DZG]UܫWhouYѪrM:Zs1w}U @oOWej>?3G u:q#b +'g )@WK%m!"zu6~x{@ofQ.ˆکI|5:;X}jmK\52`]Nt ^K:SImR=Vm\*GwgwWdH/ČMNJO +]F5:^$akVF=e?s1X\Tεٸ{jd/uF!h+OY q($%`^'P*Tƚ&<Y3 W4R93Hc!-5r ءA@ B#=M#6p=ds]ǔ Iu_cx#Ĵ p(v1==]FKa(?F( +a +<3znOSu W #r-*;>]3Z4cTW&I|_#J +endstream endobj 22 0 obj <>stream +8;YiYYmnJk$j9dhU#O\s0N;AplN@HF+[Fa0=@c!P^4.Bui?HQp]$&$V:RA.T=qkI` +hYWm +endstream endobj 23 0 obj [/Indexed/DeviceRGB 255 24 0 R] endobj 24 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> +endstream endobj 18 0 obj <> endobj 25 0 obj [/View/Design] endobj 26 0 obj <>>> endobj 21 0 obj <> endobj 7 0 obj <> endobj 14 0 obj <> endobj 15 0 obj <>stream +%!PS-Adobe-3.0 +%%Creator: Adobe Illustrator(R) 24.0 +%%AI8_CreatorVersion: 26.0.1 +%%For: (djkato) () +%%Title: (Blender_logo_no_text.svg) +%%CreationDate: 9/9/2022 9:35 PM +%%Canvassize: 16383 +%%BoundingBox: 2 12 179 157 +%%HiResBoundingBox: 2.06925787066211 12.7680975819458 178.937392920852 156.422184944592 +%%DocumentProcessColors: Cyan Magenta Yellow Black +%AI5_FileFormat 14.0 +%AI12_BuildNumber: 731 +%AI3_ColorUsage: Color +%AI7_ImageSettings: 0 +%%RGBProcessColor: 0 0 0 ([Registration]) +%AI3_Cropmarks: -24.0689655172428 -40.5689655172428 205.068965517243 188.568965517243 +%AI3_TemplateBox: 90.5 73.5 90.5 73.5 +%AI3_TileBox: -215.5 -322 396.5 470 +%AI3_DocumentPreview: None +%AI5_ArtSize: 14400 14400 +%AI5_RulerUnits: 6 +%AI24_LargeCanvasScale: 1 +%AI9_ColorModel: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI17_Begin_Content_if_version_gt:24 4 +%AI10_OpenToVie: -91.6206896551712 210.931034482758 4.83333333333333 0 8200.44827586207 8188.24137931035 1887 1314 26 1 0 46 121 0 0 0 1 1 0 1 1 0 1 +%AI17_Alternate_Content +%AI9_OpenToView: -91.6206896551712 210.931034482758 4.83333333333333 1887 1314 26 1 0 46 121 0 0 0 1 1 0 1 1 0 1 +%AI17_End_Versioned_Content +%AI5_OpenViewLayers: 7 +%AI17_Begin_Content_if_version_gt:24 4 +%AI17_Alternate_Content +%AI17_End_Versioned_Content +%%PageOrigin:-869 -467 +%AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 +%AI9_Flatten: 1 +%AI12_CMSettings: 00.MS +%%EndComments + +endstream endobj 16 0 obj <>stream +%AI24_ZStandard_Data(/XUg.} -DĔٰGh&Amw`n)%"uIоk - )2! +r- PXM +az$݂F>"&A0t݂a-I:"(gw!w G"򪔋u`/NU 3(UgyUZ(cfC7N?L +L3WEn08vVo,>PW1.vFTdK-#xcEF0a ktҥН4U¤aƉBVih>%`P.-Ktrҥ e>P=<@č adM-(HO^J@8xH)CEc<>- DtЂX6W^$9E`BTkY\^Sh&Lpd^]h# OŧEˎ ++h7iboQ‡0PҘ"ߣ67Wz㚸[0&F7F6PY A4)1LtQ6?:d1UȌ B#@$a2kT-/f4!-ڔԊYU,0 fpNXlS>_+Dx݋tGiqn8 @H'O! KPXvEJ* bɊb!863 IteE$lHtI*,a@ |ֲ3HH 'F3&HMr9rhm8Q$:MuN +1_`NKp6[iK7ŽQIIkVl>VO*]j1Z QҚIW bZ/PfRFM[hVjZ; L8"EmZ7#FˤNE֨MFRӨi Q5cHMkE[$Ef}&H[$-|FiiQi2Zl0DZkX;mxH +16FJZd-jie E,|c($}.P2HWW*i, 8A MjмQ|!Eg6ڋ#,M|/i@rld١ϟu$E K[$HM934[ MWk B#˒%2<Xf&qq?GR<]X݂ [lOS$qJ `,PJy4?>B-߂RqaRqj*g0`ب^ϵk:w-ֺ9:ߚV.;oZ W P}]0l5-. 78i7z$ ƅ ǃo0CڀtnZxN!%%X"l"|!u:Ynd'XN$oFx;qeEK4d$'3o%s2XD pisAR l$8)>X r2,HZ`Jz$܄ KDJIl]`I +)Z ++X+LI 6l7 bF+x‚sH&d O1FQ9y[0NVˎy4[<޽^mrXX[c 5\F1& +a ,u;PLWbO=< OچskmΟ>ܮVZ-*w9roi}ٷ~pPL chS`3 +s ϑF1rX2j~h0V D _$B.! tX Xjb*CT+Ƨܰr8 %P \_k2o-41ӻLkOf n6ӊ-Yw+]Y ld9IQI.Q<ڈKMܥ [[‹&8,s'X+IPHAj4Fn5(EKs$ _w8 b::m?JBi"RXO)^%rڲcP3q >cP3p|fk|f̌23N"a%$-#2#D`Lw89A31gCOP7>Ax!zIB&^hAn*i0*k0G"1maY}$>&)++[3VV#B)5CJ)aL + +UV6 +`yT%KU(-0奆nYgEje4h( x&MD@We(Ts#$ +H<3=ZY_3# 0u`itfQz*A`x*Dh0y*84Xni$iȴ&A +Pf]4݂P1JBbGo%1BDz@_]V)q8V!Sqc +ue؈ʒ*X-JVhKCARɥ"X~`PXAp_qT$^~RV*JFTD`RՊ BAZof# 6 +"S7Bˆ򓼡jAŠbPM&R(ɄvV +J!IULj$9 QL;T6.ۤ2clFܳtx?3d* *"02/19.{ jtD1a(8?=L`D3Ž(FaGhF|ȫ((cY*JY Qlrdx Tؖ5f+ Ca @|rUffX?nB-U"| >d20ާ[08&VYtVIHixXBo`Cy \.ϣ`򄲯Q-T>QD'}݂yBl(O"T-̈{B32!%Tc"%ih_e9AHH -Fʣ*axIl @VLK4!AK"¬;>CC BW[0^a` A@ ?0MWhSm?q+q-4@_- ATt`|/CdȲ ( +ҀNթ0ty`uЬV:)[(x _k@^2j`40(4FL@2g4ȫ2 RAU\(!`"&bm֭ynX"4 %OEީ+GˈUPQ$8L ͌+ +=)DDD,H>A*+%͏v V@KrT =t Ƃ#)!!8LDŽu\݂Q)<)\*FAA k4@M"-lR%p >8!#*S8c%adSCD%T N@""@[0l1cP;V8r"Y&bVH2%ӻA9- /Beebj"ʈn66Hy\H yșW  9Isk[9Luw)j~svcs_W[{~k/:?;ޜw/3[s~kl;~}n<_mmy[[ygzs_-εc\g+1՝ּqxsoTs|{mr`Ը;Wιr7wZkyrmʽmPqu`u YnX*ς 7_AD.|>:@݂!`Z,W F!ʂO+W`!i'|Pm +}xuBi2Y\Ax䂡+zT`B*PNET)_,UffX%,0!skP" +_ Ul *˚ThNqCJdX%| J;aJ2kHe 6vu鈌2dA.w %0 +(ufLq^_h>UtQթka²nCv Ff-Y}f_f[uhC뫓UP-AmW_#CрB/pIgt'&H+O`BT0wJUBJ_-s51oP@4̝)a'*T ntBJEt0yA0 fH.",0ԇcabN݂AX,+ < ͤ0giIqP +w4SLsC4#(f "*Qe0 GB.铌>;+نtG`L Ûhl<4$OnȀzb H0 aX׈X0*em9 M*jxJx2B%sȫn51„BO.z%*a%櫶 c<앟d"@h$`` +s$Xhr?WmK> HBV Z OX 8!9ߎvK>y@ M-u#@> `/"ݺˁtH0WiCQi4LX@A50XDcYҶ0ujX[0rCx9fY#p(G6dG D[in;j0W$`F(2dǐ1#U4^t FwJ^=  @RH2^]v,oky D2Ƴ$-1^, .*@)a}=:Vb X\WI #85"q2[yX2S!v)<*t v5,\h'e?\u ZWC$Z(zbҚ2UEi"zYp,*zO +9HTpB_qBGK*_=*uS^XeW컠`[0$!_,E Gy0qq&,e]2އ'ne`L4CPp9,ĬD;xXqG6T*|ov/Y) -H@z F+W)̥"~F$@qʲB\N׸.2D%Sr6 ҰS'jS ݂-]pY6X +b\HėˤeaĖu0c9N#_:K' #T_ݤ[I6 +mmXTe( "|Ys5^ŠKȌ\0njjdQiTr*X4N [iTTqI 4@ 5H8} , ˡL@C]^;$Ld@蓰ͥ!DJ@5 Rf9 ӀUTx +-F8}+S$*FM`>[0a[VQin8*'Pӂܲ%V@URmyB .C +AP,S(LYv F`.4ITe۩@ِbDc +Or—L`&OӹY OU)"5HJSB@bGStzcGiN9a b@Cal ||9v2v臑[0$ =MI3z +JO$a 0O` 4aʬ?&Z#BB^uFffQkt [el@]D5 ^Ji^C#q Ұ&Oea")Ī*&.Cz2&c l VPM e!cL'd AơX8v2 +}u }uBIO!@u'-1^栕k%a^DG;xTLdcZ QE$23ޥ"~S%~ځՈ&b)TD`Qx^HFD'+c<*9*,WmUW I!ܼA4$ ˡ¡}8LTSYJ6(KX!=6ϯDȕ,0^O6X!0C[q,3~qͺnm)v[k>u}nVg~մƺok5U_1r_\_Ʒڛk5ŝ˻Ws35NktzV3K74;[{SݹUw|ݹ>ߌs׹R{~[w߹zsnz{V._yܾ1U?y_{3~rWݽ޵s]r6dRZI&I֛cg-o%(V(u-w7Ϝcl9ƛ}׼v9R9}{םZጭ6[ι[y:׿S-|[秊sV?z}io}_ޯŴ^7b{i_{i\nnq|is)9q6sroۧ;?wk\oWs+r5[o S`$1225٦ J&L:.LFL22"I@,H (2rfk,W_h{ah 3"]Ok/U:j\ĸ;V֌yBŅj%$QHs^<⃉8RodDg2#2dȩICVu?}Θ+3+QK\r__*j 3{sc5q6aAWΎ{`inz<7vK[{Db "k!m^OYUq"O#WG„H|1at*z@E,)Siޓ(qć4ZͪVbd}F,.pa%/ ϨW:eID UqP3=ӷR*j"ƻCvY +]Cv'^uJfG홸,;ypW'`],nTl֍4>7}Xի O ԉ,GcԠF>(j >J;)J9Qj tBVa9JOFy-W }4Ƕ>;:]Z}mBo\C̐qCAC력:Ե(?!>4hOOM[_>Y:R|S|*92eڰjTI|F 7ɖHagRҬS>ȧsPO5D2&!;Lڵ(<:d#|Qo:E&a# iw"d#֕ 6 38?^,Qpu-ǰ2JG@z?cpZ!;ڲ߱{H7/qs[`"*moZ`#&#QiK07ldA=(KVQAPrjⴽ,y:6=]G1+ KzsdFX 9Hy[?"8fU֟7BL@Cq@"L3~.usrS#t@ y;cqh%&VF"!q#(ˆ2sˈ8q5톌^#a[Z.mڼklkH٪5GEQbqu>y3Mz.2ht-Bf2liʊUw%=,d"Ѽ'k,TQٶ.j:S]yT $|OzCߗYҼ>(׬g5Qƻ Dwgޖ$5qes4: }[xZ7{OQ"C]A"R4Ջ~'7"{%!y3Vy]!k{p`JF@Dhkc%VX3X9&%:  + ޥLlQ1ZS4v2"6Rbj1hf@~@Ci7kSVQZ&m/&7X >a c3 +掸oQ3C0t* Pϕ߹E鿸^`ϣ0X +s+E$CJ%Dvn?dLB -(9RG]]F7 !fC=,&gObcVν!Tb@q&@W`ze÷\TL]ۄTI5'%ͨADf.]AU˶!'aA1#ぃCΖ"Xْa +TM.@&k/AIq\ +Y4 Z/@qpl:>K0pPKT'^!kT^qAJy(L?Qn{Kͤ1T{KrSITDZps.%*cM fͷ\dȧ<;S]):7 c(5 P߲ ii]43jv@BWj'0 +ޠ|LORaL *zk`Pd +Fz:MGcq#t1|^mSVd"5%z/L=zx4jMS&C!E$p[C*[P.gKMLM7 <k9q +y3t/FaYWCNcC.}ȫ[;З9;?&b')`4$?XIm?Z^"U!+pGW|^1,bNJHy% ȶUjش +Yk}d]d#_,1 Xi +2hR?m^nnn\*euE| ZR$>k~vwAfY~!ߧKSE٘hFM58K/!0 ǹ %EDzњh{:-i~ܙ23zH:@ +~xqv ׷*y)s]MKܓCERZ{\"PŽƬS\LK>d0UE@ d}7樂GZ.J٠p#ӞE51=0mZO?O%P +>>9;jKf-5F;d֤ 5-/v)?-䏫-gQVݢS3[\%Xb`!Ჳ ۘvbaP_Ƭ4~ Ь@q +'J*nNe$>u"*Y[m`juyy?(`:yǥܸȣUwn$Yb\;:? @-Y2 B x\ĥr/­q Q_`2OS>kYUAaWwN9eCr\b}th)6As˗M fa0yPޗlb/b @PgbU+_gg>}/t)o Av,0' 'H b'7C8tst$TgñP2]D:tqb(Pң ~! )OvM3Y̬$o6ym d?ہ2w _KciNav`cd4JV1oStSXmVEA +!?9$P9 b㎭H`hLa&mos{Br&'E9\/D3{ I" GsUz2)$pCI5IdB,U8X9V=p \-[)mg XDbY,+MKMUʌdEA4 qQ$}OoIqaW4? k>$b#9i Yզ氢&Hֱ1fqÉzlߨLdGc%_F5Ru$j|dݯMG0ْu[+=4_p238b4MeA0|MHa +8 ۦQ^k' zs_b$nlz4{S!eU|!9>DQw O `M4v8 ULN86&$&Y4UCrΌ&%1PB]ԁTh 4)I<}\5􇢰Ȱ_7&EkD?>/+&N$&sV+&URn=,&EZΦSJbwK'k4L2(3.QPY$Jv! +w>DkЍ3%{&c0Lq>&fC`X2e:1)W+8SNh'6x|j[-}Nk LG=ҌK C#1l٥{ n@ϤY`I0V@&5c'ǙcKHTSikLULZ9V3tJ.w +4SkD3CmaS+zq%&w.o7z+L-|kCU8y>5VI58ގW(6+~1˰sbFʜJF?  ÒcWA .hQ@T)nmVl~õT= _vU7<',~.kԸH]tۼXH$܆Æ6kC~hp՟5(\k24s(a9Š{;XPz)5(ebe2}5M8w ڮBDgBҎŠ*b]\nB)ӗQ|<wxV{Wa5MW'O9k*E5\c^Ufr'!|z",?u0^$#I1yȥXCK̡sA k"+!֔f1!9!I(u%&>4*nńp"J bV΅#`$7ǜ2#NQnhs&:%f5 IJEs;|؀:IUY@x,tdk/R1tlm=Ԝ%y#jKBBPg$Ŀ%ViCLP%01'h>\$J/!q!\ !fn6;#4[}!ְ0Cu,G6B|SmEv:R |Ώfa6ۧ)Wj)*/ 0&46Tpt&>"Tb]7!+! MMͅSJPV3ֵ:n +|@v9'1:n$*w_tbS[¨;˓5kj4ͻxH`ey\G-eX:fRu- fkoOer;6Sg_/itDI&$DN(,Dx*. +6ǐ*ݮs|EhpHq ~m]XŷԲEr2b$I̔_dl,x&Y>/i96gfM&A& 4Kf7&#U3b*ՆpYC] @xQvQO:XgA㲀[`6a. dVz..j0y؎Q\#t.%̄ˠgX(P"3?˅d8հJkVF`e5z;52 h5%lB=߆ɂhT +KmO> "0!siH2epal,hukFG}D2LuF>ǺVp3CԋlkTa~tǃkD3FAШ'Ywo\ !Kl4!d(ќd"ki*31w#+LhK+39Oܐ"L LvuSpL KXj;nMtCulcE]=9ꭣ5SЂ)g^Ć N̛E:& cy5@Fe\sX\ѯ6x<F80%ԓڊU`3/s-~伯Y8md4+' LgA5#p?#<ͤԍE$D? Zn#S#Hw`'\Ov[m=dx7Yxc e+_ZJ'arjD!m9|烠6eeaE{%uϡ`+<~jPNh|]h)3 甆~Qrz )-5.meJa thYJ72 *W~VvIոw4ڭޠZ5,$G<9NJXM(exF#˚3O74!Km_S=gs&XO4>OPg@:"!lf;=p OZ6@'ME ++@&k"wPN<'2MHU78em#g5Xlptf2˪)]7C\ǡL%IƧih +N =E4X1C3E%Pyps2E氝}ɟo +LJu8E4_)%t +=еn-: +5k]w~ͲvӐ$k>h:Q5tWLP(s8bL,Ke]Zyζ5<uK*Rk&;0#WV 㳎,#Rzf WЊ6煺RņVX`QAh{7/d$T ujyW*ϥJ o%5t9 +7؆_0IH`P#}c|iVXJĻRA[P![ԝ" ++A}!}5?߃|\njN @qeD< 29v_jFrӹqKd.Oj49ӽ= *k7$*>wVQr7!deId_i9nkd{Ma З=YX>PʱɝK_#qȓ`15f`6To6]y$mǾhOwww|X }TJ*lHۊd6K[l|<_U`:Q̿ xWSOo՜:vHщ#o+0 Qe4 KxAQZ䨩Ec Zf=W+OFm๏Je6+K_4-1x;Mf+rtx6h-q[|}(]߯ yGJ s}EHކR߱ 4'L_Xs +C}}vh/n\%?è.$P6K0:_Ǡ=2ED>8c,#LJt3Dt1ɕgÙ|<*lj W:Z+ -IeݢX$l5 ?6:NRp0H]_q&mwɼ> -<2A_~fY%P(Y2W'$ pv2,$T5o5BlehcrB&>c\n~ȉEFxWVe^g+FbȬ> NѝߪHNGQ!T!֛l766w"<)tC eyiA,dϻN;wMeC6v>7B3̳^NhZ-⌔) ̓2mά,e9}c~~"tᡢYʐut{%AIqdI1(0FGfOڪ:81w/'3<p1fZ4̓oS7TwuDdJ䮷(m4Nxz`>kښR`X H_ƨb8xtXbYb %9?CWkyspS[H_.dr=iK']``C^0vDX :T@N&oEAwvT"&yh9F.A +ĸW|60^Ж T#}t%`- 08L6U[yU8d*4$ Nv![ I6H;jF`E,s9T M/Iho&̉7*T):MG#= MH +J}| bdy8*Kid"1M8={L#ЊTmC`%GD^׻u ׇryM E$hsװGfᒹVK )u`j:țG="ˊ߀ gAڪr̬̣ 6R +w2E>ҵ]Wk?\D \C+g+;fNV 8l`$DF*)蛘-ҰU &U'0"71(Mg?G p-W.S8JIY'_!h7ik@Ѝ=Uh Kܢy 'q̤u56$2 +(twcOdPR;ھ+!T^A4.%[_ކiϺ rbf Fjk6D^$ӕ}%6]$U_ +B۠xbD*ځqS #nC&5t7 DM! n(X|Sq.0!U07 +1V!= kc}-h9$ j#HRRXс֬u-_-4|1V 5|M?C9j^9\>HfAdIkFC/gTM<!+R*hs>h?fi@ \i6#eF838\VN kQ ޑYT.J {)y(B3ڴӐ305c)'o~fxD韺cZA,]7Rد(ZiQQxΏż%k+:ڛ +aǍXuFYQ!;l9Gp?i<,_9L6HA,r3E +"z; -dLOTD6B5sI͋+ (l9pl[}tGI1]ьVVX3n^QӴXt yH)Gz3fL d +*ƏmWJM#"͓| #tv +Y>>g" J%ćv +t]N0)sUҊhX3d +|Yº`bDG"i%lۢ& g# !k 2*BQz7x퓆 ]}='&gӆ77/=`욧~ZHRk u|9!lvӞ0[וyӏNU\VaCtsȳ;O?*f?)C$1{!Nepr} !(Qf*}nx( N 9^$e7t߀QU\Z4y9m@+cup"eT2jRٺ #Y{'tɜe !1g`Z Dm.;ΌA(ڴo6N,98 {er[LU +mҰBx%&ʶpy ДPnGy +D~mO.q8rp3yطh^'q>'%|4#oeJqo jPQ cUU$qߖ]9_Kn34bL|TRYT$dѷ' s~蹆~K__zQ;EynHʆ]pڧ7YH +A:/pLO6o.Bכؑ;U-r 13^XbUs6*ai~?3wK2'HP! ;U󎤸Wm, v{=wb)2l@1*˜U$YΈ48M$hK/3Ć^ħɨ?ʦ{'qƉ ]^ 0;礻ȝ2,~*nvbDBd8zl4$pc{V| q¯%N)8Ǜ,I}h!dYpMPWSUZr/ 0Ip~؍|`3v8 UऑdzF 𩻻#n:*Gȷ|FjPhVZ}zDZD9Ӟ8nsBx!% FJa畆[&ŷ<,ε]PFQaЯPS4䔸wӵ]o8䄭#=e帑%,g-%JaOZz%L)kЛLUB9dvߧڍ}|(^4fBbH[Be+in@ SAMij#M 8v!n%[v\zfV( +yݓ w^SlG:4^]o",Za՟f#Jk`㢍Bj !ih{Qom\ EzIȢza8QekMAP0[`xLfYT?$ .I;>&G)/fW$v1U5}iM2MC-,KHU`F3alb.S),p@=U#FbGnOӓ!\ZȮ˔ʫ5~{ƻe=a:Nii5Hv\Y9z -#y[%k0f)|S&B]@ @Ś(~rD$RE +3b`nv@5v.*3D$ 2+;͇eLi2tEY:!<ŇG +ŎK,J]lrchATOTܫhSӾGq/ y;٩sdvFS +.Ճho~~:n~lsj1 cIdW}i1qS#~ (Ȋ0 %_ +z!LUr0l}l&q#3=BDE WؖL#C" i[ +lrT!<HǏ`&g)&dR> endobj xref +0 28 +0000000004 65535 f +0000000016 00000 n +0000000147 00000 n +0000021206 00000 n +0000000000 00000 f +0000021257 00000 n +0000000000 00000 f +0000024128 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000024201 00000 n +0000024342 00000 n +0000025962 00000 n +0000000000 00000 f +0000023828 00000 n +0000053926 00000 n +0000021638 00000 n +0000024015 00000 n +0000022956 00000 n +0000023266 00000 n +0000023314 00000 n +0000023899 00000 n +0000023930 00000 n +0000053951 00000 n +trailer +<]>> +startxref +54149 +%%EOF diff --git a/program icons/Vegas_Pro_15.0.png b/program icons/Vegas_Pro_15.0.png new file mode 100644 index 0000000..d52faeb Binary files /dev/null and b/program icons/Vegas_Pro_15.0.png differ diff --git a/program icons/substance_designer.png b/program icons/substance_designer.png new file mode 100644 index 0000000..df341ed Binary files /dev/null and b/program icons/substance_designer.png differ diff --git a/program icons/substance_painter.png b/program icons/substance_painter.png new file mode 100644 index 0000000..f62ddd2 Binary files /dev/null and b/program icons/substance_painter.png differ diff --git a/src/app.rs b/src/app.rs index 9a1dec0..428191e 100644 --- a/src/app.rs +++ b/src/app.rs @@ -1,10 +1,13 @@ +use crate::program_status::get_running_windows_titles; +use lazy_static::lazy_static; +use regex::Regex; +extern crate lazy_static; #[derive(Debug)] pub struct App { pub kind: AppKind, pub default_project_name: String, pub drp_client_id: String, pub process_search_string: String, - pub config_search_string: String, } #[derive(Debug, PartialEq, Eq)] pub enum AppKind { @@ -19,9 +22,14 @@ pub enum AppKind { DavinciResolve, Clarisse, Marvelous, - Calvary, + Cavalry, Ableton, FL, + Blender, + Audition, + SubstancePainter, + SubstanceDesigner, + Vegas, } pub struct Apps { @@ -36,13 +44,18 @@ pub struct Apps { DavinciResolve: App, Clarisse: App, Marvelous: App, - Calvary: App, + Cavalry: App, Ableton: App, FL: App, + Blender: App, + Audition: App, + SubstancePainter: App, + SubstanceDesigner: App, + Vegas: App, } impl Apps { - pub fn as_iter(&self) -> [&App; 14] { - let APPS: [&App; 14] = [ + pub fn as_iter(&self) -> [&App; 19] { + let APPS: [&App; 19] = [ &self.C4d, &self.Maya, &self.ThreeDsMax, @@ -54,16 +67,21 @@ impl Apps { &self.DavinciResolve, &self.Clarisse, &self.Marvelous, - &self.Calvary, + &self.Cavalry, &self.Ableton, &self.FL, + &self.Blender, + &self.Audition, + &self.SubstancePainter, + &self.SubstanceDesigner, + &self.Vegas, ]; APPS } } impl AppKind { - pub fn as_iter() -> [AppKind; 14] { - let APPKINDS: [AppKind; 14] = [ + pub fn as_iter() -> [AppKind; 19] { + let APPKINDS: [AppKind; 19] = [ AppKind::C4d, AppKind::Maya, AppKind::ThreeDsMax, @@ -75,9 +93,14 @@ impl AppKind { AppKind::DavinciResolve, AppKind::Clarisse, AppKind::Marvelous, - AppKind::Calvary, + AppKind::Cavalry, AppKind::Ableton, AppKind::FL, + AppKind::Blender, + AppKind::Audition, + AppKind::SubstancePainter, + AppKind::SubstanceDesigner, + AppKind::Vegas, ]; APPKINDS } @@ -89,100 +112,116 @@ impl Apps { default_project_name: "Cinema 4D Project".to_string(), drp_client_id: "936296341250904065".to_string(), process_search_string: "Cinema 4D R".to_string(), - config_search_string: "c4d".to_string(), kind: AppKind::C4d, }, Maya: App { default_project_name: "Autodesk Maya Project".to_string(), drp_client_id: "1016369550276694106".to_string(), process_search_string: "Autodesk Maya".to_string(), - config_search_string: "maya".to_string(), kind: AppKind::Maya, }, ThreeDsMax: App { default_project_name: "3ds Max Project".to_string(), drp_client_id: "1016395801402036315".to_string(), process_search_string: " Autodesk 3ds Max".to_string(), - config_search_string: "threedsmax".to_string(), kind: AppKind::ThreeDsMax, }, AfterEffects: App { default_project_name: "After Effects Project".to_string(), drp_client_id: "1016395319522623539".to_string(), process_search_string: "Adobe After Effects".to_string(), - config_search_string: "after_effects".to_string(), kind: AppKind::AfterEffects, }, PremierePro: App { default_project_name: "Premiere Pro Project".to_string(), drp_client_id: "1016396017832300555".to_string(), process_search_string: "Adobe Premiere Pro".to_string(), - config_search_string: "premiere_pro".to_string(), kind: AppKind::PremierePro, }, Illustrator: App { default_project_name: "Illustrator Project".to_string(), drp_client_id: "1017491707819991071".to_string(), - process_search_string: "Adobe Illustrator".to_string(), - config_search_string: "illustrator".to_string(), + process_search_string: "Illustrator.exe".to_string(), kind: AppKind::Illustrator, }, Photoshop: App { default_project_name: "Photoshop Project".to_string(), drp_client_id: "1017493347415371917".to_string(), - process_search_string: "Photoshop".to_string(), - config_search_string: "photoshop".to_string(), + process_search_string: "Photoshop.exe".to_string(), kind: AppKind::Photoshop, }, Indesign: App { default_project_name: "Indesign Project".to_string(), drp_client_id: "1017493794456862781".to_string(), process_search_string: "Indesign".to_string(), - config_search_string: "indesign".to_string(), kind: AppKind::Indesign, }, DavinciResolve: App { default_project_name: "Davinci Resolve Project".to_string(), drp_client_id: "1016371757722128516".to_string(), - process_search_string: "Davinci Resolve".to_string(), - config_search_string: "davinci_resolve".to_string(), + process_search_string: "DaVinci Resolve - ".to_string(), kind: AppKind::DavinciResolve, }, Clarisse: App { default_project_name: "Isotropix Clarisse Project".to_string(), drp_client_id: "1016372248128532500".to_string(), process_search_string: "Isotropix Clarisse".to_string(), - config_search_string: "clarisse".to_string(), kind: AppKind::Clarisse, }, Marvelous: App { default_project_name: "Marvelous Designer Project".to_string(), drp_client_id: "1016372646046351423".to_string(), process_search_string: "Marvelous Designer".to_string(), - config_search_string: "marvelous".to_string(), kind: AppKind::Marvelous, }, - Calvary: App { + Cavalry: App { default_project_name: "Cavalry Project".to_string(), drp_client_id: "1016374130037243974".to_string(), - process_search_string: "calvary.exe".to_string(), - config_search_string: "calvary".to_string(), - kind: AppKind::Calvary, + process_search_string: "Cavalry.exe".to_string(), + kind: AppKind::Cavalry, }, Ableton: App { default_project_name: "Ableton Project".to_string(), drp_client_id: "1016375030227161150".to_string(), process_search_string: "Ableton Live".to_string(), - config_search_string: "ableton".to_string(), kind: AppKind::Ableton, }, FL: App { default_project_name: "FL Studio Project".to_string(), drp_client_id: "1016393561140375712".to_string(), process_search_string: "FL Studio".to_string(), - config_search_string: "fl".to_string(), kind: AppKind::FL, }, + Blender: App { + kind: AppKind::Blender, + default_project_name: "Blender Project".to_string(), + drp_client_id: "1017878734746963978".to_string(), + process_search_string: "BlenderGLEW".to_string(), + }, + Audition: App { + kind: AppKind::Audition, + default_project_name: "Audition Project".to_string(), + drp_client_id: "1017879756282286153".to_string(), + process_search_string: "Adobe Audition.exe".to_string(), + }, + SubstancePainter: App { + kind: AppKind::SubstancePainter, + default_project_name: "Substance Painter Project".to_string(), + drp_client_id: "1017881633296232578".to_string(), + process_search_string: "Substance 3D Painter".to_string(), + }, + SubstanceDesigner: App { + kind: AppKind::SubstanceDesigner, + default_project_name: "Substance Designer Project".to_string(), + drp_client_id: "1017881386583080971".to_string(), + process_search_string: "Substance Designer".to_string(), + }, + Vegas: App { + kind: AppKind::Vegas, + default_project_name: "Vegas Project".to_string(), + drp_client_id: "1017882355723153448".to_string(), + process_search_string: "Vegas Pro".to_string(), + }, } } } @@ -196,14 +235,6 @@ impl Apps { } None } - pub fn find_config_app(&self, str: &str) -> Option<&App> { - for app in self.as_iter() { - if str == app.config_search_string { - return Some(app); - } - } - return None; - } } impl App { @@ -218,8 +249,8 @@ impl App { match window_title.find(".c4d]") { Some(i) => end_i = i as usize, None => match window_title.find(" - Main") { - Some(i) => end_i = i as usize - 1, - None => end_i = window_title.len() - 1, + Some(i) => end_i = i as usize, + None => end_i = window_title.len(), }, }; } @@ -228,11 +259,11 @@ impl App { } AppKind::Maya => { let match_index = match window_title.as_str().find(".mb* - Autodesk Maya") { - Some(i) => i, + Some(i) => i + 5, None => match window_title.as_str().find(".mb - Autodesk Maya") { Some(i) => i + 4, None => { - return String::from("Autodesk Maya Project"); + return self.default_project_name.clone(); } }, }; @@ -253,17 +284,160 @@ impl App { } proj_name } - AppKind::ThreeDsMax => self.default_project_name.clone(), - AppKind::PremierePro => self.default_project_name.clone(), - AppKind::Illustrator => self.default_project_name.clone(), - AppKind::Photoshop => self.default_project_name.clone(), + AppKind::ThreeDsMax => { + let match_index = match window_title.as_str().find(".max* - Autodesk 3ds Max") { + Some(i) => i + 5, + None => match window_title.as_str().find(".max - Autodesk 3ds Max") { + Some(i) => i + 4, + None => { + return self.default_project_name.clone(); + } + }, + }; + return window_title[..match_index as usize].to_string(); + } + AppKind::DavinciResolve => { + let match_index = match window_title.as_str().find("DaVinci Resolve -") { + Some(i) => 17 as usize, + None => 0 as usize, + }; + let mut with_project_extention = window_title.clone(); + with_project_extention.push_str(".drp"); + return with_project_extention[match_index as usize..].to_string(); + } + AppKind::PremierePro => { + let mut proj_name = String::new(); + for i in (0..window_title.len() - 2).rev() { + if window_title.chars().nth(i).unwrap() == '\\' { + for char in window_title.chars().skip(i + 1) { + proj_name.push(char); + } + return proj_name; + } + } + if proj_name == "" { + proj_name = window_title.clone(); + } + proj_name + } + AppKind::Illustrator => { + let running_windows_titles = unsafe { get_running_windows_titles() }; + lazy_static! { + static ref REG_AI: Regex = + Regex::new(r".{0,} @ (\d{0,}\.\d{0,}|\d{0,}) % \(\w{3,4}\W\w{0,}\b\)") + .unwrap(); + } + let mut match_index = self.default_project_name.len(); + let mut matching_title = self.default_project_name.clone(); + + for titles in running_windows_titles { + if REG_AI.is_match(&titles) { + if let Some(i) = titles.find("@") { + matching_title = titles.clone(); + match_index = i; + } + } + } + let out_string = matching_title[..match_index].to_string(); + out_string + } + AppKind::Photoshop => { + let running_windows_titles = unsafe { get_running_windows_titles() }; + lazy_static! { + static ref REG_PSD: Regex = + Regex::new(r".{0,}@ (\d{0,}|\d{0,}.\d{0,})% \(.{0,}, \w{0,}\W.{0,}\)") + .unwrap(); + } + let mut match_index = self.default_project_name.len(); + let mut matching_title = self.default_project_name.clone(); + + for titles in running_windows_titles { + if REG_PSD.is_match(&titles) { + if let Some(i) = titles.find("@") { + matching_title = titles.clone(); + match_index = i; + } + } + } + let out_string = matching_title[..match_index].to_string(); + out_string + } AppKind::Indesign => self.default_project_name.clone(), - AppKind::DavinciResolve => self.default_project_name.clone(), - AppKind::Clarisse => self.default_project_name.clone(), + AppKind::Clarisse => { + let match_index = match window_title.as_str().find(".ple* - Isotropix Clarisse") { + Some(i) => i + 5, + None => match window_title.as_str().find(".ple - Isotropix Clarisse") { + Some(i) => i + 4, + None => match window_title.as_str().find(" - Isotropix Clarisse") { + Some(i) => i, + None => { + return self.default_project_name.clone(); + } + }, + }, + }; + return window_title[..match_index as usize].to_string(); + } AppKind::Marvelous => self.default_project_name.clone(), - AppKind::Calvary => self.default_project_name.clone(), - AppKind::Ableton => self.default_project_name.clone(), - AppKind::FL => self.default_project_name.clone(), + AppKind::Cavalry => { + let running_windows_titles = unsafe { get_running_windows_titles() }; + lazy_static! { + static ref REG_CV: Regex = + Regex::new(r"Project: .{0,}Scene: .{0,}\.cv ").unwrap(); + } + let mut match_index = 0; + let mut matching_title = self.default_project_name.clone(); + + for titles in running_windows_titles { + if REG_CV.is_match(&titles) { + if let Some(i) = titles.rfind(r"/") { + matching_title = titles.clone(); + match_index = i + 1; + } + } + } + let out_string = matching_title[match_index..].to_string(); + out_string + } + AppKind::Ableton => { + let match_index = match window_title.as_str().find(" - Ableton Live") { + Some(i) => i, + None => return self.default_project_name.clone(), + }; + return window_title[..match_index as usize].to_string(); + } + AppKind::FL => { + let match_index = match window_title.as_str().find(" - FL Studio") { + Some(i) => i, + None => return self.default_project_name.clone(), + }; + return window_title[..match_index as usize].to_string(); + } + AppKind::Blender => { + let running_windows_titles = unsafe { get_running_windows_titles() }; + lazy_static! { + static ref REG_BL: Regex = + Regex::new(r"Blender \[.{0,}\\\w{0,}\.blend]").unwrap(); + } + let mut match_index = 0; + let mut matching_title = self.default_project_name.clone(); + + for titles in running_windows_titles { + if REG_BL.is_match(&titles) { + if let Some(i) = titles.rfind(r"\") { + matching_title = titles.clone(); + match_index = i + 1; + } + } + } + let end_i = matching_title.len(); + let out_string = matching_title[match_index..end_i - 1].to_string(); + out_string + } + AppKind::Audition => self.default_project_name.clone(), + AppKind::SubstancePainter => self.default_project_name.clone(), + AppKind::SubstanceDesigner => self.default_project_name.clone(), + AppKind::Vegas => self.default_project_name.clone(), } } } diff --git a/src/main.rs b/src/main.rs index d541493..62b6a88 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ -#![windows_subsystem = "windows"] +//#![windows_subsystem = "windows"] //UNCOMMENT ONLY WHEN BUILDING FOR RELEASE TO NOT SHOW TERMINAL WINDOW! pub mod app; pub mod config; pub mod program_status; diff --git a/src/program_status.rs b/src/program_status.rs index f7134fe..7084cbd 100644 --- a/src/program_status.rs +++ b/src/program_status.rs @@ -5,10 +5,13 @@ use windows::Win32::{ }; pub fn get_running_program(apps: &Apps) -> Option<(&App, String)> { let running_window_names = unsafe { get_running_windows_titles() }; - for window_name in running_window_names { + dbg!(&window_name); if let Some(app) = apps.find_app(&window_name) { - return Some((&app, app.parse(&window_name))); + if !window_name.contains("- Google Chrome") { + //So googling it won't affect the DRP lol + //return Some((&app, app.parse(&window_name))); + } } } return None; @@ -17,15 +20,17 @@ pub fn is_program_still_running(app: &App) -> Option { let running_window_names = unsafe { get_running_windows_titles() }; for window_name in running_window_names { - //dbg!(&window_name); if window_name.contains(&app.process_search_string) { - return Some(app.parse(&window_name)); + if !window_name.contains("- Google Chrome") { + //So googling it won't affect the DRP lol + return Some(app.parse(&window_name)); + } } } return None; } -unsafe fn get_running_windows_titles() -> Vec { +pub unsafe fn get_running_windows_titles() -> Vec { let mut running_windows_names: Vec = Vec::new(); unsafe extern "system" fn processhwd(hwnd: HWND, lparam: LPARAM) -> BOOL { // Get the length of the window text @@ -46,7 +51,8 @@ unsafe fn get_running_windows_titles() -> Vec { for char in window_text_buffer { window_text.push(char as char); } - //turn characters into strings + //turn characters into strings, but exclude last weird escape null char "\0" + window_text.pop(); let window_text = String::from_iter(window_text.iter()); //turn vector into pointer and push window_texts to it